在 TS 中如果没有显示指定类型,那么类型时被推导出来的。在初始化变量和成员,设置参数默认值以及确定函数返回类型时会发生这种推断。
大部分情况下推断是直接了当的,但是有些情况下会有一些细微的差别。
Best common type
通常情况下,类型推断会取公共的类型,例如:
let x = [0, 1, null];
// ^ = let x: (number | null)[]
但是有些情况下可能取不到公共类型,如下
class A {
name: string = 'xxxx'
}
class B extends A {
}
class C extends A {
}
class D extends A {
}
const a = [new B(), new C(), new D()]
// ^ = const a: (B | C | D)[]
// 这个时候如果我们想要取公共类型 A,需要显示指定
const a: A[] = [new B(), new C(), new D()]