基本上,我要实现的是自动合并导出的接口(请参阅service.ts文件)
//interfaces.ts
export interface A {
type: "A-Type";
}
export interface B {
type: "B-Type";
}
//service.ts
import * as InterfacesNamespace from "interfaces";
type UnionAB = ExtractUnion<typeof InterfacesNamespace>; //-> A|B
我尝试过但没有成功的
type ExtractUnion<T> = T extends { [key: string]: infer U } ? U : never;
type UnionAB = ExtractUnion<typeof InterfacesNamespace>; // leads to -> unknown
我不会感到惊讶,但实际上,当这种类型是函数的返回类型时,它有效:
//interfaces.ts
interface A {
type: "A-Type";
}
interface B {
type: "B-Type";
}
export function getA():A {
return <A>{};
}
export function getB():B {
return <B>{};
}
并提取这些函数的ReturnType
//service.ts
import * as InterfacesNamespace from "interfaces";
type UnionAB = ReturnType<ExtractUnion<typeof InterfacesNamespace>>; //-> A|B
所以问题是-为什么它不能与普通接口一起使用,并且有一种方法可以使它在没有这种形式的功能的情况下工作?