為什么總在,那些飄雨的日子,深深的把你忘記。每一個周一,都是難受的,本想周末好好休息放松,結果比上班還累,拖著疲憊的身體,估計得熬到周三,才能緩過來,然后就又周末了,寫了個死循環(huán),你說氣不氣。需要個生活鼓勵師啊啊啊啊啊啊啊啊啊啊
interface 和 type 關鍵字
在TypeScript中的表現(xiàn):
interface A {
a: string
b: number
}
type B = {
b: number
c: number[]
}
type C = A | B; // C類型的變量的鍵只需包含ab或bc即可,當然也可以abc都有
type D = A & B; // D類型的變量的鍵必需包含abc
對于這種表現(xiàn),可以這樣理解:&表示必須同時滿足多個契約,|表示滿足任意一個契約即可。
interface 和 type 兩個關鍵字因為其功能比較接近:
- interface 的特點:
- 同名interface自動聚合,也可以和已有的同名class聚合,適合做polyfill
- 自身只能表示object/class/function的類型
- type的特點:
- 表達功能更強大,不局限于object/class/function
- 要擴展已有type需要創(chuàng)建新type,不可以重名
- 支持更復雜的類型操作
type Tuple = [number, string];
const a: Tuple = [2, 'sir'];
type Size = 'small' | 'default' | 'big' | number;
const b: Size = 24;
基本上所有用interface表達的類型都有其等價的type表達。也有只能用interface表達,無法用type表達,那就是往函數(shù)上掛載屬性。
extends 關鍵字
extends本意為“拓展”,也有人稱其為“繼承”。在TypeScript中,extends既可當作一個動詞來擴展已有類型;也可當作一個形容詞來對類型進行條件限定(例如用在泛型中)。在擴展已有類型時,不可以進行類型沖突的覆蓋操作。例如,基類型中鍵a為string,在擴展出的類型中無法將其改為number。
type A = {
a: number
}
interface AB extends A {
b: string
}
// 與上一種等價
type TAB = A & {
b: string
}