如何从TypeScript联合类型中提取函数类型?
提取联合类型中的函数类型实现方案
你可以利用TypeScript的条件类型分布式特性来实现这个需求,Pick工具类型仅适用于对象的键值结构,确实无法处理联合类型的筛选,而条件类型可以针对联合类型的每个成员做判断筛选。
直接匹配目标函数签名的实现
这种方式精准匹配UnionThing<T>中的函数类型:
type UnionThing<T> = T | ((value: T) => T); type FnThing<T> = UnionThing<T> extends ((value: T) => T) ? UnionThing<T> : never;
通用提取函数类型的实现
如果需要更通用的、提取任意联合类型中所有函数类型的工具,可以这样写:
type UnionThing<T> = T | ((value: T) => T); type ExtractFunction<T> = T extends (...args: any[]) => any ? T : never; type FnThing<T> = ExtractFunction<UnionThing<T>>;
验证示例
当你使用具体类型测试时:
type NumberFn = FnThing<number>; // NumberFn 的类型会被推导为 (value: number) => number
条件类型的分布式特性会自动遍历联合类型的每个成员,判断该成员是否符合函数类型的约束,符合条件的成员会被保留,不符合的则返回never,最终得到的就是你需要的纯函数类型。
内容的提问来源于stack exchange,提问作者홍우지
相关产品推荐
相关产品推荐

