联合类型(Union Types)表示取值可以为多种类型中的一种。
简单的例子
let myFavoriteNumber:string|number;
myFavoriteNumber='seven';
myFavoriteNumber=7;
myFavoriteNumber=true//Type 'boolean' is not assignable to type 'string | number'.
联合类型使用 | 分隔每个类型。这里的 let myFavoriteNumber: string | number 的含义是,允许 myFavoriteNumber 的类型是 string 或者 number,但是不能是其他类型。
** 访问联合类型的属性或方法**
当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法:
function getLength(someting:string|number):number{
return someting.length;//Property 'length' does not exist on type 'string | number'. Property 'length' does not exist on type 'number'.
}
上例中,length 不是 string 和 number 的共有属性,所以会报错。访问 string 和 number 的共有属性是没问题的:
function getString(something:string|number):string{
return something.toString()
}
联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型:
let myFavoriteNumber:string|number;
myFavoriteNumber='seven';
console.log(myFavoriteNumber.length);//5 myFavoriteNumber 被推断成了 string,访问它的 length 属性不会报错
myFavoriteNumber=7;
console.log(myFavoriteNumber.length);//Property 'length' does not exist on type 'number'.这里报错的原因是myFavoriteNumber
被推断成了 number,访问它的 length 属性时就报错了
网友评论