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

TypeScript索引访问类型优化:避免重复路径访问非均匀生成类型

解决非均匀类型中重复路径提取的问题

针对你遇到的自动生成的非均匀Foo类型,我们可以通过条件类型+映射类型的组合来避免重复书写["bar"]["quux"]路径,同时兼容不包含该结构的属性:

步骤1:定义条件类型提取目标类型

先写一个通用的条件类型,用来判断某个类型是否包含bar.quux结构,并提取quux的类型;如果不包含则返回never(避免误用):

type GetBarQuux<T> = T extends { bar: { quux: infer U } } ? U : never;

这里的infer U是TypeScript的类型推断语法,用来自动提取quux对应的类型。

步骤2:创建映射类型简化访问

基于Foo和上面的条件类型,生成简化后的BQ类型:

type Foo = {
  foo1: { bar : { quux : string }},
  foo2: { bar: { quux: number }},
  foo3: number
};

type BQ = {
  [K in keyof Foo]: GetBarQuux<Foo[K]>;
};

步骤3:业务代码中使用简化类型

现在你可以直接通过BQ["foo1"]、BQ["foo2"]来访问目标类型,无需重复书写路径:

function aaa(x: BQ["foo1"]) { // x 类型为 string
  // ...
}

function bbb(x: BQ["foo2"]) { // x 类型为 number
  // ...
}

对于不包含bar.quux结构的foo3,BQ["foo3"]会被推断为never,如果尝试在函数参数中使用它,TypeScript会直接报错,避免了错误的类型引用。

内容的提问来源于stack exchange,提问作者nponeccop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:40:46