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

如何从Type|Type[]联合类型中提取未导出的基础Type类型?

从导出的联合类型中提取内部数组的基础类型(无需直接引用未导出类型)

假设我们有如下类型定义,其中CurrentType未导出,仅导出了包含它和它的数组类型的联合类型ExportedType:

interface CurrentType {
  a: string;
  b: number;
}

type ExportedType = CurrentType | CurrentType[]

// 需要得到:type DesiredType = CurrentType

以下是两种无需直接引用CurrentType的实现方案:

方案一:通用条件类型提取(推荐)

通过条件类型判断输入类型是否为数组,自动推断并提取数组元素类型,非数组类型直接保留:

type ExtractBaseType<T> = T extends Array<infer U> ? U : T;
type DesiredType = ExtractBaseType<ExportedType>; // 类型为 CurrentType

原理

ExtractBaseType会遍历联合类型的每个成员:

  • 当成员是CurrentType[]时,通过infer U推断出数组的元素类型CurrentType;
  • 当成员是CurrentType时,直接返回该类型;
    最终两个分支的结果合并后就是CurrentType,完美匹配需求。这种方法兼容性强,即使联合类型后续新增其他同结构的成员也能正常工作。

方案二:排除数组类型

如果确定联合类型中仅包含目标类型和它的数组类型,可以直接用Exclude排除所有数组类型,得到剩余的基础类型:

type DesiredType = Exclude<ExportedType, any[]>; // 类型为 CurrentType

原理

Exclude<T, U>会从类型T中移除所有可赋值给U的成员,这里any[]匹配所有数组类型,所以会排除CurrentType[],剩下的就是CurrentType。

内容的提问来源于stack exchange,提问作者Tristan F.-R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:24:22