联合类型(union types)指的是多个类型组成的一个新类型,使用 符号| 表示。联合类型 A|B 表示,任何一个类型只要属于 A或B ,就属于联合类型 A|B
联合类型可以与值类型相结合,表示一个变量的值有若干种可能
前面提到,打开编译选项 strictNullChecks 后,其他类型的变量不能赋值为 undefined 或 null。这时,如果某个变量确实可能包含空值,就可以采用联合类型的写法
联合类型的第一个成员前面,也可以加上 竖杠| ,这样便于多行书写
如果一个变量有多种类型,读取该变量时,往往需要进行“类型缩小”(type narrowing),区分该值到底属于哪一种类型,然后再进一步处理
上面示例中,参数变量 id 可能是数值,也可能是字符串,这时直接对这个变量调用 toUpperCase() 方法会报错,因为这个方法只存在于字符串,不存在于数值。解决方法就是对参数 id 做一下类型缩小,确定它的类型以后再进行处理
“类型缩小”是 TypeScript 处理联合类型的标准方法,凡是遇到可能为多种类型的场合,都需要先缩小类型,再进行处理。实际上,联合类型本身可以看成是一种“类型放大”(type widening),处理时就需要“类型缩小”(type narrowing)。下面是“类型缩小”的另一个例子