为什么这甚至可以编译?
Why does this even compile?
class X {}
let x : X = 123 // why is this ok?
console.log(x instanceof X)
以上代码编译(出于某种原因)并产生 false
。
请向我解释为什么 TypeScript 在这种情况下不强制类型正确性。
为未来的读者编辑:
Murat K 的回答是正确的,但我想为您节省一次点击和 15 分钟的时间:
- TypeScript 的类型系统是结构化的。
123
被视为 Number
. 类型的对象
- 从结构上讲,
Number
是 一个与 X
类型兼容的子类型 ,因为它具有 X
的所有方法和字段,并且更多
空 class 基本上是一个空对象,因为它没有任何可 class 证明的东西。这就是为什么你可以给它分配任何东西。
同一问题请参见 github 问题 here
class X {}
let x : X = 123 // why is this ok?
console.log(x instanceof X)
以上代码编译(出于某种原因)并产生 false
。
请向我解释为什么 TypeScript 在这种情况下不强制类型正确性。
为未来的读者编辑:
Murat K 的回答是正确的,但我想为您节省一次点击和 15 分钟的时间:
- TypeScript 的类型系统是结构化的。
123
被视为Number
. 类型的对象
- 从结构上讲,
Number
是一个与,因为它具有X
类型兼容的子类型X
的所有方法和字段,并且更多
空 class 基本上是一个空对象,因为它没有任何可 class 证明的东西。这就是为什么你可以给它分配任何东西。
同一问题请参见 github 问题 here