[英]Typescript extends for excluding union members
考慮以下使用extends
來從聯合類型中刪除成員:
type RemoveNames<N, K> = N extends K ? never : N
type Names = 'bill' | 'jane' | 'freddy'
type Bill = RemoveNames<Names, 'jane' | 'freddy'> // type Bill = 'bill'
在一個相關問題中, N extends K
被定義為意味着“N 可分配給 K”,但在這種情況下(從表面上看) N
不可分配給K
- 只有N
的縮小版本可分配給K
在這種情況下如何解釋extends
? 如果N
的成員不在K
中,是否會對其進行迭代和“過濾”(?)?
在解析Bill
類型時,TypeScript 采用Names
聯合類型的每個類型,並解析條件類型N extends K? never: N
N extends K? never: N
,然后使用結果構建最終的聯合類型:
'bill'
是否擴展'jane' | 'freddy'
'jane' | 'freddy'
? 否: N extends K? never: N
N extends K? never: N
給出'bill'
'jane'
是否擴展'jane' | 'freddy'
'jane' | 'freddy'
? 是: N extends K? never: N
N extends K? never: N
給出never
'freddy'
是否擴展了'jane' | 'freddy'
'jane' | 'freddy'
? 是: N extends K? never: N
N extends K? never: N
給出never
最后一個類型是這三種類型的聯合'bill' | never | never
'bill' | never | never
'bill' | never | never
給出'bill'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.