let d: { id: number };
d = { id: 2, name: 'archer' }; // compilation error
let e: { id: number };
let e1 = { id: 2, name: 'archer' };
e = e1; // okay
结论
它表明打字稿在将一个变量分配给另一个变量时不会检查兼容性,但是在将对象常量和变量分配给变量时会检查兼容性。
此外,我对情况2 感到困惑,因为根据handbook,类型检查器将仅根据形状进行类型检查。
答案 0 :(得分:1)
通过您添加的链接
... 对象常量在分配给其他变量或作为参数传递时会得到特殊对待,并进行多余的属性检查。如果对象文字具有“目标类型”所没有的任何属性,则会出现错误
这就是案例1失败的原因。
答案 1 :(得分:0)
类型兼容性-https://www.typescriptlang.org/docs/handbook/type-compatibility.html
对于案例2 ,适用以下规则:
要检查是否可以将y分配给x,编译器会检查每个 x的属性以在y中找到对应的兼容属性。在 在这种情况下,y必须具有一个名为name的成员,该成员是字符串。是的, 因此允许分配。