聯合類型
使用聯合類型定義屬性和方法,只要符合其中一種即可
let myPhone: string | number = '010-7788'
// let myPhone1: string | number = true 因為沒有包含boolean值 會報錯const fn = (something: number | boolean): boolean => {return !!something
}console.log(fn(1))
console.log(fn(true))
!!一般用來將后面的表達式強制轉換為布爾類型的數據(boolean),也就是只能是true或者false
隱式轉換:a = “1234” - 0 //轉換為數字 b = 1234 + “” //轉換為字符串
交叉類型
需要符合兩種類型,相當于extends關鍵字
interface ModalA {name: string,age: number
}interface ModalB {sex: number
}const person: ModalA & ModalB = {name: '123',age: 12,sex: 1
}
const printData = (person: ModalA & ModalB): void => {console.log(person.name)console.log(person.age)console.log(person.sex)
}printData(person)
類型斷言
語法:值 as 類型 :value as string
或 <類型>值: <string>value
在這種情況下,由于type可能是a也可能是b,不一定存在sex屬性,所以可以加一個類型判斷,是b的時候返回sex屬性
interface ModalA {name: string,age: number
}interface ModalB {sex: number
}const person = (type: ModalA | ModalB): number => {return (type as ModalB).sex
}
類型斷言只能夠「欺騙」TypeScript 編譯器,無法避免運行時的錯誤
類型斷言是不具有影響力的。可以通過編譯,但是并不會影響結果,因為編譯過程中會刪除類型斷言
function toBoolean(something: any): boolean {return something as boolean;
}toBoolean(1);
// 返回值為 1
as const
對于字面量的斷言,與與const直接定義常量是有區別的
如果是普通類型跟const聲明是一樣的
如果是引用類型,const定義的是可以修改其中的值的,但是as const 是不可修改的