TypeScript 中奇怪的类型检查

问题描述 投票:0回答:2

案例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

结论

TypeScript 在将一个变量分配给另一个变量时似乎不会检查兼容性,但在将对象文字分配给变量时会检查兼容性。

另外,我对情况2感到困惑,因为根据手册,类型检查器只会根据形状进行类型检查。

typescript typechecking
2个回答
1
投票

来自您添加的链接

... 对象字面量在将它们分配给其他变量或将它们作为参数传递时,会受到特殊处理并经历过多的属性检查。如果对象字面量具有“目标类型”没有的任何属性,您将收到错误

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


0
投票
类型兼容性 -

https://www.typescriptlang.org/docs/handbook/type-compatibility.html

对于

情况 2,应用以下规则:

为了检查 y 是否可以分配给 x,编译器会检查每个 x 的属性来查找 y 中相应的兼容属性。在 在这种情况下, y 必须有一个名为 name 的字符串成员。确实如此, 所以允许分配。

© www.soinside.com 2019 - 2024. All rights reserved.