我正在關注Typescript的Pluralsites課程。當與接口的工作,我有以下幾點:Typescript接口可選方法屬性未定義
interface Book {
id: number;
title: string;
author: string;
available: boolean;
category: Category;
pages: number;
markDamaged: DamageLogger;
}
interface DamageLogger {
(reason: string): void;
}
我現在宣佈一本書中:
let myBook: Book = {
id: 5,
title: 'Pride and Prejudice',
author: 'Jane Austen',
available: true,
category: Category.Fiction,
pages: 250,
markDamaged: (reason: string) => console.log('Damaged: ' + reason)
};
myBook.markDamaged('missing back cover');
一切都很好,但只要我改變接口的markDamaged是可選如:
interface Book {
id: number;
title: string;
author: string;
available: boolean;
category: Category;
pages: number;
markDamaged?: DamageLogger;
}
該行的編譯器樹皮:
myBook.markDamaged('missing back cover');
並說markDamaged屬性可能是未定義的。我刪除了問號,一切都很好。
任何想法這是怎麼回事?我在課程的其他地方使用可選參數,但是在使用接口時,這是我所看到的。
感謝您的幫助。
那麼,因爲markDamaged被標記爲可選項,所以它不可能存在於對象中。如果它不存在,它是未定義的。所以你需要在調用它之前檢查它是否存在。 –