【发布时间】:2017-11-11 15:48:02
【问题描述】:
我正在深入学习有关 Typescript 的 Pluralsites 课程。使用接口时,我有以下几点:
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 被标记为可选,它不可能存在于对象中。如果它不存在,则它是未定义的。所以你需要在调用它之前检查它是否存在。
标签: typescript interface