元組能夠看做是數組的拓展,表示已知元素數量和類型的數組。也就是說已知數組中每個位置上元素的類型數組
let tuple: [string, number, boolean];
tuple = ["a", 2, false];
tuple = [2, "a", false]; // error 不能將類型「number」分配給類型「string」。 不能將類型「string」分配給類型「number」。
tuple = ["a", 2]; // error Property '2' is missing in type '[string, number]' but required in type '[string, number, boolean]'複製代碼
枚舉能夠看做是給數值賦予名字bash
enum Roles {
SUPER_ADMIN = 0,
ADMIN = 1,
USER = 2
}
console.log(Roles.SUPER_ADMIN) //0
也能夠經過值來獲取到名字
console.log(Roles[1]) // ADMIN
複製代碼
Any表示賦予任何值均可以,即任意類型函數
let value: any;
value = 123;
value = "abc";
value = false複製代碼
也能夠在定義數組類型時使用 any 來指定數組中的元素類型爲任意類型
ui
const array: any[] = [1, "a", true];複製代碼
void表示沒有任意類型,與Any相反spa
const consoleText = (text: string): void => {
console.log(text);
}; //沒有返回值複製代碼
void類型的變量只能賦值爲undefined和null,其餘類型不能賦值給void類型的變量code
never指那些永遠不存在的值的類型,它是那些總會拋出異常或根本不會有返回值的函數表達式的返回值類型。get
const errorFunc = (message: string): never => {
throw new Error(message);
};複製代碼
const infiniteFunc = (): never => {
while (true) {}
};複製代碼
nuknown表示未知類型string
交叉類型就是取多個類型的並集,使用 & 符號定義,被&符連接的多個類型構成一個交叉類型,
表示這個類型同時具有這幾個鏈接起來的類型的特色
const merge = <T, U>(arg1: T, arg2: U): T & U =>{ let res = <T & U > {}; res = Object.assign(arg1, arg2) return res}const info1 = { name: 'Lison'}const info2 = { age: 18}const ListInfo = merge(info1,info2)console.log(ListInfo) // Object複製代碼
聯合類型實際是幾個類型的結合,可是和交叉類型不一樣,聯合類型是要求只要符合聯合類型中任意一種類型便可,它使用 |
符號定義。當咱們的程序具備多樣性,元素類型不惟一時,即便用聯合類型。
it
const getLength = (content: string|number): number => { if(typeof content === "string"){ return content.length }else{ return content.toString().length }}console.log(getLength("abcd")) //4console.log(getLength(1234)) //4複製代碼