私は、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はオプションとマークされているので、オブジェクトに存在することはできません。存在しない場合は未定義です。だから、それを呼び出す前にそれが存在することを確認する必要があります。 –