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
子站问答
访问
宣传栏