如TypeScript handbook中所述:
TypeScript的核心原则之一是类型检查关注于值所具有的形状。这有时被称为“鸭子打字”或“结构子类型”。在TypeScript中,接口充当命名这些类型的角色,......
我的理解是,上述核心原则与 Duck typing 但Structural typing无关,因为TypeScript是静态类型语言。
如wiki中所述:它要求将类型检查推迟到运行时,并通过动态类型或反射来实现...对象的适用性由存在决定某些方法和属性(具有适当的含义),而不是对象的实际类型。
我如何理解TypeScript的上述核心原理?
答案 0 :(得分:4)
来自Duck test和Duck Typing以及维基百科
如果看起来像鸭子,像鸭子一样游泳,像鸭子一样呱呱叫,那么它可能是一只鸭子。
这实际上是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
接口,它也具有相同的结构,因此隐式实现了接口。这是Duck Typing
更新如果将LabelledValue
接口定义为类,则上述代码不会编译"。这是结构类型。
注意 TypeScript没有运行时检查,因为它是"编译"到JavaScript
答案 1 :(得分:1)