Appearance
类型体操常用技巧
1. 字面量类型转string类型
ts
type Res = 'abc' & string
type Res = 'abc' & string
2. 触发类型计算
ts
type Res = Obj extends any ? xxx : never
type Res = Obj extends any ? xxx : never
3. 判断是否联合类型
js
type IsUnion<A, B = A> =
A extends A // 触发联合类型
? [B] extends [A] // ['a' | 'b' | 'c'] extends 'a' 如果成立说明就不是联合类型,不成立就是联合类型
? false
: true
: never
type IsUnion<A, B = A> =
A extends A // 触发联合类型
? [B] extends [A] // ['a' | 'b' | 'c'] extends 'a' 如果成立说明就不是联合类型,不成立就是联合类型
? false
: true
: never
4. 判断是否是any类型
any 类型与任何类型的交叉都是 any,也就是 1 & any 结果是 any。
ts
// 'guang' & T 如果是any 就说明 T是any
type IsAny<T> = 'dong' extends ('guang' & T) ? true : false
// 'guang' & T 如果是any 就说明 T是any
type IsAny<T> = 'dong' extends ('guang' & T) ? true : false
5. 判断两个类型是否相同
ts
type IsEqual2<A, B> = (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2)
? true : false;
type IsEqual2<A, B> = (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2)
? true : false;
6. 字面量类型支持string类型
ts
type MyType = 'warn' | 'danger' | (string & {});
type MyType = 'warn' | 'danger' | (string & {});