let myFavoriteNumber: string | number;
myFavoriteNumber = true;
// index.ts(2,1): error TS2322: Type 'boolean' is not assignable to type 'string | number'.
// Type 'boolean' is not assignable to type 'number'.
聯合型別使用 | 分隔每個型別。
這裡的 let myFavoriteNumber: string | number 的含義是,允許 myFavoriteNumber 的型別是 string 或者 number,但是不能是其他型別。
function getLength(something: string | number): number {
return something.length;
}
// index.ts(2,22): error TS2339: 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 = 7;
console.log(myFavoriteNumber.length); // 編譯時報錯
// index.ts(5,30): error TS2339: Property 'length' does not exist on type 'number'.