TypeScript 规定,单个值也是一种类型,称为“值类型”

    值类型 - 图1

    TypeScript 推断类型时,遇到 const 命令声明的变量,如果代码里面没有注明类型,就会推断该变量是值类型

    值类型 - 图2

    上面示例中,变量 x 没有被推断为值类型,而是推断属性 foo 的类型是 number。这是因为 JavaScript 里面,**const 变量赋值为对象时**,属性值是可以改变的。值类型可能会出现一些很奇怪的报错

    值类型 - 图3

    上面示例中,等号左侧的类型是数值5,等号右侧4 + 1的类型,TypeScript 推测为number。由于5是number的子类型,number是5的父类型,父类型不能赋值给子类型,所以报错了。但是,反过来是可以的,子类型可以赋值给父类型

    值类型 - 图4

    如果一定要让子类型可以赋值为父类型的值,就要用到类型断言

    值类型 - 图5