前言

联合类型(Union Types)表示取值可以为多种类型中的一种。

简单案例

这里在定义a的时候,声明了number类型与string类型,所以允许a定义值为数值和字符。

  1. let a: string | number = '1';
  2. a = '1';
  3. a //'1'

访问联合类型的属性和方法

在遇到联合类型时,我们需要根据类型推论去判断出它时什么类型,可以使用什么方法。

  1. function Fn (name: string | number):number {
  2. return Number(name)
  3. }
  4. 分析
  5. 参数name,接收stringnumber
  6. 函数返回值必须时number
  1. let anything: string | boolean | numer;
  2. anything = '123';
  3. anything.length //3
  4. anything = 123;
  5. anything.length; //Property 'length' does not exist on type 'number'.
  6. 分析
  7. 变量anything定义类型为stringbooleannumber
  8. 在定义值的时候根据类型推论,会推出一个类型,那么只能使用当前类型的方法

测试用例

  1. let debug:boolean = true;
  2. let a: string | number = 1;
  3. a = '2';
  4. let b: boolean | object = {
  5. name: 'along'
  6. }
  7. b = false;
  8. // 场景应用 参数联合类型 返回值必须是boolean
  9. function getFun (a: string | number | boolean): boolean {
  10. return typeof(a) == 'string' || typeof(a) == 'number' || typeof(a) == 'boolean' ? true : false;
  11. }
  12. debug && console.log({
  13. a: `${a}:${typeof(a)}`,
  14. b: `${b}:${typeof(b)}`,
  15. fun: `${getFun(1)}:${typeof(getFun(1))}`,
  16. });
  17. ----------------------------------------------------------------------------------------
  18. { a: '2:string', b: 'false:boolean', fun: 'true:boolean' }

参考

https://ts.xcatliu.com/basics/type-inference.html