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>
原理解释
keyof typeof t会得到对象所有键的联合类型:"fn1" | "fn2" | "fn3"typeof t[keyof typeof t]会得到所有键对应值的类型联合,也就是三个函数的类型联合ReturnType作用于函数联合类型时会自动分发计算,将每个函数的返回值组合为新的联合类型- 通用方案中的
FunctionPropertyNames会先过滤掉值不是函数的键,避免非函数属性传入ReturnType导致类型报错
内容的提问来源于stack exchange,提问作者user5234194
相关产品推荐
相关产品推荐

