Typescript 为什么还要编译?

Typescript 为什么还要编译?,typescript,typechecking,Typescript,Typechecking,上面的代码编译(出于某种原因)并生成false 请向我解释为什么TypeScript在这种情况下不强制执行类型正确性 为未来读者编辑: Murat K的回答是正确的,但我想为您节省一次点击和15分钟的时间: TypeScript的类型系统是结构化的 123被视为Number类型的对象 从结构上讲,Number是与X兼容的子类型,因为它具有X等的所有方法和字段 空类基本上是一个空对象,因为它没有任何东西可以归类为某物。这就是为什么你可以给它分配任何东西 有关相同的问题,请参阅github问题 c

上面的代码编译(出于某种原因)并生成
false

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

为未来读者编辑

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

  • TypeScript的类型系统是结构化的
  • 123
    被视为
    Number
    类型的对象
  • 从结构上讲,
    Number
    是与
    X
    兼容的子类型,因为它具有
    X
    等的所有方法和字段

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

      有关相同的问题,请参阅github问题

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