【发布时间】:2020-08-08 23:55:43
【问题描述】:
Typescript 在某些情况下执行“鸭子”输入,例如当您根据接口检查函数参数的有效性时。
例如:
interface Named {
name: string
}
function printName(x: Named) {
return x.name;
}
const myVar = {
name: "John",
happy: "OK", // This extra key-value pair does not break our printName function
};
printName(myVar);
然而,当你创建一个变量并定义它的类型时,一个额外的键值对会抛出一个类型错误:
const myVar: Named = { name: "Jim", extraVal: "Oops" } // The "extraVal" is not allowed.
1) 为什么 Typescript 在第二个实例中检查 exact 匹配,但不检查传递给函数的参数?
2) 是否还有其他使用鸭式打字的情况,如何区分这些情况?
【问题讨论】:
-
{ name: "John", happy: "OK", }看起来确实实现了Named。它在const x: T和嵌套对象字面量创建中出错的原因是纯粹的实用主义,因为在错误的键下指定了 optional 成员。
标签: typescript