TypeScript 類型別名
本節(jié)介紹的類型別名,就是通過關(guān)鍵字 type
給類型起個別名,類型別名較多應用于聯(lián)合類型、交叉類型這種復合類型。
1. 慕課解釋
類型別名會給類型起個新名字。類型別名有時和接口很像,但是可以作用于原始值,聯(lián)合類型,元組以及其它任何你需要手寫的類型。
用關(guān)鍵字 type
定義類型別名。
2. 舉例說明
類型別名不會新建一個類型,而是創(chuàng)建一個新名字來引用此類型。
先看下面幾個例子,
原始類型:
type brand = string
type used = true | false
const str: brand = 'imooc'
const state: used = true
聯(lián)合類型:
type month = string | number
const currentMonth: month = 'February'
const nextMonth: month = 3
交叉類型:
interface Admin {
id: number,
administrator: string,
timestamp: string
}
interface User {
id: number,
groups: number[],
createLog: (id: number) => void,
timestamp: number
}
type T = Admin & User
同接口一樣,類型別名也可以是泛型:
type Tree<T, U> = {
left: T,
right: U
}
3. 接口 vs. 類型別名
類型別名看起來和接口非常類似,區(qū)別之處在于:
- 接口可以實現(xiàn) extends 和 implements,類型別名不行。
- 類型別名并不會創(chuàng)建新類型,是對原有類型的引用,而接口會定義一個新類型。
- 接口只能用于定義對象類型,而類型別名的聲明方式除了對象之外還可以定義交叉、聯(lián)合、原始類型等。
類型別名是最初 TypeScript 做類型約束的主要形式,后來引入接口之后,TypeScript 推薦我們盡可能的使用接口來規(guī)范我們的代碼。
4. 小結(jié)
類型別名在定義交叉類型、聯(lián)合類型時特別好用,要注意類型別名與接口的區(qū)別。