获取在命名空间中导入的一组接口的联合类型

时间:2019-06-21 10:20:21

标签: typescript

基本上,我要实现的是自动合并导出的接口(请参阅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

所以问题是-为什么它不能与普通接口一起使用,并且有一种方法可以使它在没有这种形式的功能的情况下工作?

0 个答案:

没有答案