typeScript學習的第3天

為什么總在,那些飄雨的日子,深深的把你忘記。每一個周一,都是難受的,本想周末好好休息放松,結果比上班還累,拖著疲憊的身體,估計得熬到周三,才能緩過來,然后就又周末了,寫了個死循環(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 兩個關鍵字因為其功能比較接近:

  1. interface 的特點:
  • 同名interface自動聚合,也可以和已有的同名class聚合,適合做polyfill
  • 自身只能表示object/class/function的類型
  1. 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
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容