发布于 2018-05-01 14:42:28
如果它看起来像鸭子,游泳像鸭子,叫声像鸭子,那么它很可能是鸭子。
这本质上就是TypeScript接口的工作方式。对象只需要看起来像接口,而不是显式地实现它。
形成链接到的页面:
interface LabelledValue {
label: string;
}
function printLabel(labelledObj: LabelledValue) {
console.log(labelledObj.label);
}
let myObj = {size: 10, label: "Size 10 Object"};
printLabel(myObj);尽管myObj没有显式地实现LabelledValue接口,但它确实具有相同的结构,因此隐式地实现了接口。这是鸭子打字
如果UPDATE将LabelledValue接口定义为类,那么上面的代码就不会“编译”。这是结构打字。
Note TypeScript没有运行时检查,因为它是“编译”到JavaScript的。
发布于 2020-05-01 10:59:28
interface Duck {
typing(): void;
}
const porky = {} as Duck;
try {
porky.typing();
} catch (error) {
console.log(error); // TypeError: porky.typing is not a function
}
const isDucky = (it: { typing?: () => void }): it is Duck =>
typeof it.typing === 'function';
const daffy = {
typing: () => console.log('tappity tap tap')
};
if (isDucky(daffy)) {
daffy.typing(); // tappity tap tap
}

https://stackoverflow.com/questions/50118155
复制相似问题