類型別名
類型別名用來給一個(gè)類型起個(gè)新名字热幔。
type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
function getName(n: NameOrResolver): Name {
if (typeof n === 'string') {
return n;
} else {
return n();
}
}
上例中殖氏,我們使用 type 創(chuàng)建類型別名蛉谜。
字符串字面量類型
字符串字面量類型用來約束取值只能是某幾個(gè)字符串中的一個(gè)稚晚。
type EventNames = 'click' | 'scroll' | 'mousemove';
function handleEvent(ele: Element, event: EventNames) {
// do something
}
handleEvent(document.getElementById('hello'), 'scroll'); // 沒問題
handleEvent(document.getElementById('world'), 'dbclick'); // 報(bào)錯(cuò),event 不能為 'dbclick'
// index.ts(7,47): error TS2345: Argument of type '"dbclick"' is not assignable to parameter of type 'EventNames'.
上例中型诚,我們使用 type 定了一個(gè)字符串字面量類型 EventNames客燕,它只能取三種字符串中的一種。
注意狰贯,類型別名與字符串字面量類型都是使用 type 進(jìn)行定義也搓。
元組
元組(Tuple)合并了不同類型的對(duì)象
例子: 定義一對(duì)值分別為 string 和 number 的元組:
let xcatliu: [string, number] = ['Xcat Liu', 25];
當(dāng)直接對(duì)元組類型的變量進(jìn)行初始化或者賦值的時(shí)候,需要提供所有元組類型中指定的項(xiàng)涵紊;其他情況可以只賦值一個(gè)元素傍妒。
枚舉
枚舉用于取值被限制在一定范圍內(nèi)的場景,枚舉使用 enum 關(guān)鍵字來定義:
enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
枚舉成員會(huì)被賦值為從 0 開始遞增的數(shù)字摸柄,同時(shí)也會(huì)對(duì)枚舉值到枚舉名進(jìn)行反向映射颤练。
枚舉項(xiàng)的值也可以手動(dòng)賦值,未手動(dòng)賦值的枚舉項(xiàng)會(huì)接著上一個(gè)枚舉項(xiàng)遞增驱负。
enum Days {Sun = 7, Mon = 1, Tue, Wed, Thu, Fri, Sat};
注:當(dāng)有相同值的時(shí)候嗦玖,后面賦值的會(huì)覆蓋前面的。