gpt4 book ai didi

javascript - 结构类型不是鸭子类型(duck typing)

转载 作者:搜寻专家 更新时间:2023-10-30 21:22:15 26 4
gpt4 key购买 nike

如 TypeScript 中所述 handbook :

One of TypeScript’s core principles is that type-checking focuses on the shape that values have. This is sometimes called “duck typing” or “structural subtyping”.In TypeScript, interfaces fill the role of naming these types,...


我的理解是,上述核心原则与Duck typing无关,而是Structural typing ,因为 TypeScript 是静态类型语言。

wiki 中所述: 它要求将类型检查推迟到运行时进行,并通过动态类型或反射的方式实现...一个对象的适用性取决于是否存在某些方法和属性(具有适当的含义),而不是实际的对象的类型。

如何理解上述TypeScript的核心原理?

最佳答案

来自 Duck testDuck Typing在维基百科上

If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.

这基本上就是 TypeScript 接口(interface)的工作方式。一个对象只需要看起来像接口(interface)而不是明确地实现它。

形成您链接到的页面:

interface LabelledValue {
label: string;
}

function printLabel(labelledObj: LabelledValue) {
console.log(labelledObj.label);
}

let myObj = {size: 10, label: "Size 10 Object"};
printLabel(myObj);

尽管 myObj 没有显式实现 LabelledValue 接口(interface),但它确实具有相同的结构,因此隐式实现了该接口(interface)。这是鸭子类型(duck typing)

更新 如果 LabelledValue 接口(interface)被定义为一个类,那么上面的代码将不会“编译”。这就是结构类型。

注意 TypeScript 没有运行时检查,因为它被“编译”为 JavaScript

关于javascript - 结构类型不是鸭子类型(duck typing),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50118155/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com