TS之联合类型

上一篇介绍了类型推论,今儿接着介绍联合类型。

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

联合类型使用 | 分隔每个类型。

简单例子

// 联合类型
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;

这里的 let myFavoriteNumber: string | number 的含义是,允许 myFavoriteNumber 的类型可以是 string 或者 number ,但不能是其他类型。

let myFavoriteNumber: string | number;
myFavoriteNumber = true;

// Type 'boolean' is not assignable to type 'string | number'.

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

当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型共有的属性或方法

function getLength(something: string | number): number {
    return something.length;
}

// Property 'length' does not exist on type 'string | number'.
// Property 'length' does not exist on type 'number'.

上述例子中,length 不是 stringnumber 的共有属性,所以会报错。访问 stringnumber 的共有属性是没有问题的。

function getString(something: string | number): string {
    return something.toString();
}

联合类型的变量再被赋值的时候,会根据推论的规则推断出一个类型:

let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';             // 被推断成 string
console.log(myFavoriteNumber.length);   // 5
myFavoriteNumber = 7;                   // 被推断成 number
console.log(myFavoriteNumber.length);   // 编译时报错

// Property 'length' does not exist on type 'number'.

上述例子中,第二行的 myFavoriteNumber 被推断成了 string,访问它的 length 属性不会报错。而第四行的 myFavoriteNumber 被推断成了 number,访问它的 length 属性时自然就会报错了。

下一篇介绍对象类型。

The end.

你可能感兴趣的:(TS之联合类型)