如何从联合类型Foo['bar']中提取Bar类型?
从联合类型中提取未导出的嵌套类型
由于Bar类型未对外导出,无法直接通过Extract<Foo['bar'], Bar>提取,我们可以利用Bar独有的结构特征,通过条件类型来精准筛选出目标类型:
import type { Foo } from './library.d.ts'; // 基于Bar的结构特征(含baz属性)定义提取类型 type ExtractBar<T> = T extends { baz?: number } ? T : never; // 从Foo['bar']联合类型中提取出Bar类型 type ExtractedBar = ExtractBar<Foo['bar']>;
原理说明
条件类型ExtractBar<T>会检查输入类型T是否包含baz?: number这一Bar独有的结构特征,匹配则返回该类型,否则返回never,以此从联合类型中筛选出Bar。
如果Bar有更多独有的属性,可以扩展条件进一步精准匹配,比如:
type ExtractBar<T> = T extends { baz?: number; // 添加更多Bar独有的属性定义 } ? T : never;
验证示例
const validBar: ExtractedBar = { baz: 456 }; // 类型校验通过 const invalidString: ExtractedBar = "test"; // 类型错误,符合预期 const invalidBoolean: ExtractedBar = false; // 类型错误,符合预期
内容的提问来源于stack exchange,提问作者Magnus
相关产品推荐
相关产品推荐

