为什么这甚至编译?

时间:2017-07-13 12:08:58

标签: typescript typechecking

class X {}
let x : X = 123 // why is this ok?
console.log(x instanceof X)

以上代码编译(由于某种原因)并产生false

请向我解释为什么在这种情况下TypeScript不会强制执行类型正确性。

为将来的读者编辑

Murat K的回答是正确的,但我想为您节省一次点击和15分钟的时间:

  • TypeScript的类型系统是结构性的。
  • 123被视为Number类型的对象。
  • 从结构上讲,Number 与[{1}}类型兼容的子类型,因为它包含X及更多的所有方法和字段。

1 个答案:

答案 0 :(得分:3)

空类基本上是一个空对象,因为它没有什么可以归类为某种东西。这就是为什么你可以为它分配任何东西。

请参阅同一问题here

的github问题