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

TypeScript如何动态提取对象内所有函数的返回值类型并合并?

方案实现

最简实现(对象所有属性均为函数时可用)

直接通过以下一行代码即可得到所有函数返回值的联合类型:

type AllReturn = ReturnType<typeof t[keyof typeof t]>

该写法等价于你示例中手动枚举得到的联合类型,无需手动逐个指定属性名。

通用兼容方案(支持过滤对象中非函数属性)

如果你的对象中可能混杂非函数类型的属性,可以先定义通用工具类型:

// 提取对象中所有值为函数类型的键
type FunctionPropertyNames<T> = {
  [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never
}[keyof T]

// 提取对象所有函数属性的返回值联合类型
type ObjectFnReturnType<T> = ReturnType<T[FunctionPropertyNames<T>]>

使用方式如下:

type AllReturn = ObjectFnReturnType<typeof t>

原理解释

  1. keyof typeof t 会得到对象所有键的联合类型:"fn1" | "fn2" | "fn3"
  2. typeof t[keyof typeof t] 会得到所有键对应值的类型联合,也就是三个函数的类型联合
  3. ReturnType 作用于函数联合类型时会自动分发计算,将每个函数的返回值组合为新的联合类型
  4. 通用方案中的FunctionPropertyNames会先过滤掉值不是函数的键,避免非函数属性传入ReturnType导致类型报错

内容的提问来源于stack exchange,提问作者user5234194

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:15:07