You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从联合类型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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 23:30:55