斷斷續續碰了一些 TypeScript 的內容,但在實務上始終缺乏一個概念式的整理,導致沒辦法隨心所欲的規劃使用。這回找上 Hiskio 上的「布魯斯的 TypeScript 入門教學」課程,看能不能有所進步。此篇會筆記下 extends 的條件判斷。
課程相關資訊
[連結]:https://hiskio.com/courses/628/lectures/33175
本篇範圍:Chapter 6
請注意:本系列文章為個人對應課程的消化吸收後,所整理出來的內容。換言之,並不一定會包含全部的課程內容,也有可能會添加其他資源來說明。
內容
1. extends 也可以用於條件判斷
2. extends 可以判斷父子關係和 interface 間是否能互相包含 ( 不一定有父子關係 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
interface A { name: string } interface B extends A{} interface C { name: string, age: number } interface D { name: string } type T1 = string extends boolean ? string : number // number type T2 = B extends A ? string : number // string type T3 = D extends C ? string : number // string |
3. 加入<T> 泛型,在決定時判斷
1 2 3 4 5 6 7 |
type TT1<T> = T extends 'andy' ? T : number type TT2<T> = T extends 'sam' ? string : number type R1 = TT2<'andy'|'sam'> // number | string (會分開一個個判斷取聯集) type TT3<T> = [T] extends ['sam'] ? string : number type R2 = TT3<'andy'|'sam'> string |
4. never 是所有類型的子類別,在泛型時會幫成空的 Union