TypeScript高階型別之條件型別

2021-10-01 16:33:25 字數 1072 閱讀 4900

含義:是一種由條件表示式所決定的型別;

基本語法:t extends u ? x : y代表的含義為:如果型別t可以被賦值給型別u ,那麼就是x型別,否則就是y型別;

作用:條件型別使型別具有了不唯一性,增加了語言的靈活性。

下面我們來看乙個最基本的例子:

type typename=

t extends string ? "string":

t extends number ? "number":

t extends boolean ? "boolean":

t extends undefined ? "undefined":

t extends function ? "function":

"object";

type t1=typenametype t2=typename

上述的例子我們可以看到t1最終為string型別,t2最終為object型別。

(a|b) extends u ? x : y  

結果會變成多個條件型別的聯合型別,可以拆解為(a extends u ? x : y) | (b extends u ? x : y)

通過這個特性可以幫助我們實現一些型別的過濾:

type dirt=t extends u ? never :t;  //可以從型別t中過濾掉可以賦值給型別u的型別(可以從型別中除去一些不需要的型別,比如undifined和null等)

type t4=dirt<'a'|'b'|'c','a'|'e'> //'b' | 'c'

//diff<'a','a'|'e'> | diff<'b','a'|'e'> | diff<'c','a'|'e'>

// never | 'b' | 'c'

// 'b' | 'c'

type notnull=dirttype t5=notnull//可以為我們過濾掉undefined和null

上述我們想要實現的效果,其實ts都為我們內建了

這裡只是簡單羅列幾個t內建的條件型別,其實還有很多,小夥伴們請自行查閱。

typeScript筆記 高階型別

inte ce obj 同態型別 只能對映存在的 type readonlyobj readonly 唯讀 type partialobj partial 介面所有的屬性變成可選的 type pickobj pick 要抽取的介面的key 非同態型別 開定義新的屬性 type recordobj r...

TypeScript高階型別之交叉型別與聯合型別

所謂的高階型別就是指ts為了保障語言的靈活性,所引入的一些語言特性,這些特性將有助於我們應對複雜多變的開發場景。將多個型別合併成乙個型別,新的型別將具有所有型別的特性,所以交叉型別特別適用物件混入的場景。inte ce doginte ce inte ce catinte ce let pet do...

TypeScript 基礎型別

基礎型別可以依據是否含有型別關鍵字分為兩類 注意 所有型別關鍵字都是小寫的。注 這種分類並不嚴謹,分類的目的僅僅用於幫助記憶型別用來指定變數的型別,相容的型別之間才能進行賦值 傳參等操作。宣告變數型別使用變數名 型別格式,如let decimal number 10,宣告之後decimal就只能接受...