TypeScript 的条件类型

文章类型:TypeScript

发布者:hp

发布时间:2025-03-17

一:引言

1:定义:

条件类型‌是 TypeScript 中一种‌高级类型操作符‌,允许基于类型之间的逻辑关系动态推导或选择新的类型‌,类似与三元运算符

2:核心:

通过 extends 关键字判断类型关系,并根据结果返回不同的类型分支

3:语法:

T extends U ? X : Y  

4:代码

type ResultType<T> = T extends string ? "String" : "NotString";  
type A = ResultType<"hello">; // "String"  
type B = ResultType<42>;       // "NotString"  

二:类型

1:过滤类型:条件类型可以用来过滤一个联合类型的某些类型

type Filter<T, U> = T extends U ? never : T;
type Result = Filter<string | number | boolean, number>; // Result = string | boolean

2:检查类型:条件类型帮助我们在一些业务逻辑中根据类型选择不同的操作

type CheckType<T> = T extends string ? "string type" : "other type";
type Result1 = CheckType<string>;  // "string type"
type Result2 = CheckType<number>;  // "other type"

3:分布式条件类型:一个条件类型如果作为一个联合类型,会被分配到每个成员

type Example<T> = T extends string ? 'yes' : 'no';
type Result = Example<string | number>; // 'yes' | 'no'

4:内置条件类型:TypeScript 提供的基础类型

5:类型推断与infer关键字:提取局部类型

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;  
type FuncReturn = ReturnType<() => number>; // number  

三:场景

1:类型转换‌:根据输入类型动态调整输出类型

‌2:简化重载函数‌:通过条件类型替代多重函数重载,减少冗余代码‌

‌3:类型守卫‌:结合 infer 关键字提取嵌套类型

四:总结

1:动态类型推导=>基于extends关系选择分支类型

2:联合类型分发=>自动遍历联合类型成员,独立处理并合并结果

3:类型提取=>结合infer提取嵌套类型