You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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,提问作者홍우지

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:06:17