打字稿中的奇怪类型检查

时间:2018-10-08 13:54:43

标签: typescript typechecking

案例1

let d: { id: number };
d = { id: 2, name: 'archer' }; // compilation error 

案例2

  let e: { id: number };
  let e1 = { id: 2, name: 'archer' };
  e = e1; // okay

结论

它表明打字稿在将一个变量分配给另一个变量时不会检查兼容性,但是在将对象常量和变量分配给变量时会检查兼容性。

此外,我对情况2 感到困惑,因为根据handbook,类型检查器将仅根据形状进行类型检查。

2 个答案:

答案 0 :(得分:1)

通过您添加的链接

  

... 对象常量在分配给其他变量或作为参数传递时会得到特殊对待,并进行多余的属性检查。如果对象文字具有“目标类型”所没有的任何属性,则会出现错误

这就是案例1失败的原因。

答案 1 :(得分:0)

类型兼容性-https://www.typescriptlang.org/docs/handbook/type-compatibility.html

对于案例2 ,适用以下规则:

  

要检查是否可以将y分配给x,编译器会检查每个   x的属性以在y中找到对应的兼容属性。在   在这种情况下,y必须具有一个名为name的成员,该成员是字符串。是的,   因此允许分配。