【问题标题】:Union of return types within nested objects嵌套对象内的返回类型联合
【发布时间】:2019-08-22 18:21:22
【问题描述】:

我有一个 TypeScript 对象,其属性包含另一个对象,该对象都包含函数属性。即符合这个接口:

interface ObjectOfFunctions {
    [key: string]: Function;
}

interface ObjectOfObjectsOfFunctions {
    [key: string]: ObjectOfFunctions;
}

我正在尝试创建一种类型,该类型表示这些内部函数的所有返回类型的联合。

我已经设法让它为单个对象工作,使用以下方法:

export type PropertyReturnTypes<T> = T[keyof T] extends ((a: any) => any) ? ReturnType<T[keyof T]> : never;

但我不知道如何使它与最外面的对象 (ObjectOfObjectsOfFunctions) 一起工作。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 您能否提供一个使用示例以及此假设类型的预期输出?

标签: typescript


【解决方案1】:

如果您试图获取所有嵌套函数的返回类型,一层深,您可以使用映射类型来使用您的ObjectOfFunctions 类型获取每个嵌套对象的所有类型返回类型。然后,您可以使用另一个索引操作来获得所有这些类型的联合:

export type PropertyReturnTypes<T> = T[keyof T] extends ((a: any) => any) ? ReturnType<T[keyof T]> : never;

export type NestedPropertyReturnTypes<T> = {
    [P in keyof T]: PropertyReturnTypes<T[P]>
}[keyof T];


type R = NestedPropertyReturnTypes<{
    o: {
        f1: () => "f1"
        f2: () => "f2"
    },
    o2: {
        f2: () => "f2"
        f3: () => "f3"
    },
}>
// Same as 
// type R = "f1" | "f2" | "f3"

play

【讨论】:

  • 太完美了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2023-01-13
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 2022-01-03
  • 2022-11-17
  • 2018-07-26
相关资源
最近更新 更多