含義:是一種由條件表示式所決定的型別;
基本語法: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就只能接受...