typescript 中如何提取联合类型中的部分类型?

interface A {
  name: TypeA | TypeB
}

假如文件中声明了 A,也把 A 导出了,但是没有导出 TypeB 和 TypeA。如果其他文件需要使用到 TypeB,如何通过类型操作来获取到 TypeB 类型。
let n: GetTypeB<A> 如何实现这个 GetTypeB

阅读 2.8k
2 个回答

没办法,不想导出 TypeB 就导出 GetTypeB

export type GetTypeB<T> = T extends { name: infer U } ? U extends TypeB ? U : never : never;
type TypeA = { a: number };
type TypeB = { b: number };


interface A {
  name: TypeA | TypeB;
}

你可以定义一个 ExcludeTypeA 类型:
type ExcludeTypeA = Exclude<A['name'], TypeA>;
推荐问题
logo
Microsoft
子站问答
访问
宣传栏