Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 嵌套对象中返回类型的并集_Typescript - Fatal编程技术网

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

Typescript 嵌套对象中返回类型的并集,typescript,Typescript,我有一个TypeScript对象,它的属性包含另一个对象,而另一个对象都包含函数属性。i、 e.符合本接口要求: 接口对象函数{ [键:字符串]:函数; } 对象函数的接口对象{ [键:字符串]:ObjectOfFunction; } 我试图创建一个类型,它表示这些内部函数的所有返回类型的并集 我已通过以下方法使其在单个对象上工作: export-type PropertyReturnTypes=T[keyof T]扩展((a:any)=>any)?返回类型:从不; 但我不知道如何使它与最外

我有一个TypeScript对象,它的属性包含另一个对象,而另一个对象都包含函数属性。i、 e.符合本接口要求:

接口对象函数{
[键:字符串]:函数;
}
对象函数的接口对象{
[键:字符串]:ObjectOfFunction;
}
我试图创建一个类型,它表示这些内部函数的所有返回类型的并集

我已通过以下方法使其在单个对象上工作:

export-type PropertyReturnTypes=T[keyof T]扩展((a:any)=>any)?返回类型:从不;

但我不知道如何使它与最外层的对象(
ObjectOfObjectsOfFunctions
)一起工作。有人能帮我吗?

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

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"
export-type PropertyReturnTypes=T[keyof T]扩展((a:any)=>any)?返回类型:从不;
导出类型NestedPropertyReturnTypes={
[P in keyof T]:PropertyReturnTypes
}[keyof T];
类型R=NestedPropertyReturnTypes“f1”
f2:()=>“f2”
},
氧气:{
f2:()=>“f2”
f3:()=>“f3”
},
}>
//同
//键入R=“f1”|“f2”|“f3”

如果您试图获取所有嵌套函数的返回类型(一级深度),则可以使用映射类型使用
objectofffunctions
类型获取每个嵌套对象的所有类型返回类型。然后,可以使用另一个索引操作获得所有这些类型的并集:

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"
export-type PropertyReturnTypes=T[keyof T]扩展((a:any)=>any)?返回类型:从不;
导出类型NestedPropertyReturnTypes={
[P in keyof T]:PropertyReturnTypes
}[keyof T];
类型R=NestedPropertyReturnTypes“f1”
f2:()=>“f2”
},
氧气:{
f2:()=>“f2”
f3:()=>“f3”
},
}>
//同
//键入R=“f1”|“f2”|“f3”

您能为这个假设类型提供一个预期输出的使用示例吗?您能为这个假设类型提供一个预期输出的使用示例吗?太好了。非常感谢你!太好了。非常感谢你!