嵌套对象中返回类型的并集

时间:2019-08-22 08:58:44

标签: typescript

我有一个TypeScript对象,其属性包含另一个都包含函数属性的对象。也就是说,它符合以下接口:

               min_A     max_A               Bs
<-10        1.4.2019  1.6.2019  [-15, -20, -30]
>=-10 <=10  1.2.2019  1.3.2019           [5, 6]
>10         1.1.2019  1.8.2019     [11, 12, 20]

我正在尝试创建一个类型,以表示这些内部函数的所有返回类型的并集。

使用以下方法,我设法使其适用于单个对象:

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; )一起使用。有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

如果您试图获取所有嵌套函数的返回类型(更深一层),则可以使用映射类型来使用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