https://github.com/type-challenges/type-challenges
- union 类型 extends 是分别执行
type A = 'A' | 'B' | 'C'
type B = A extends A ? `${A}1` : never
// B = 'A1' | 'B1' | 'C1'
- 空判断
type EmptyArray<T> = T extends [] ? true : false
type IsNever<T> = [never] extends [never] ? true : false
type EmptyObject<T> = {} extends T ? true : false
type isUnknown<T> = unknown extends T ? true : false
- 通过条件判断
type X<T> = T extends U ? X<T> : Y
递归推导
- infer 推导
// 解压
type Prop<T> = T | { type?: T };
type InferProp<T> = T extends Prop<infer R> ? R: never;
- ...数组
- 字符串模板。包括 Capitalize 等方法
- ThisType
T extends [...infer Rest, infer Last]
当T
为[]
时,Rest
为unknown[]
判断unknown[]
:unknown extends T[0]