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

TypeScript如何实现支持多路径段的IReference泛型获取正确返回类型

解决方案

你可以通过递归工具类型+剩余参数泛型实现多路径段的类型自动推导,修改后的完整代码如下:

// 递归工具类型:根据路径数组获取目标对象对应位置的类型
type DeepIndex<T, Path extends any[]> =
  Path extends [infer FirstSegment, ...infer RestSegments]
    ? FirstSegment extends keyof T
      ? DeepIndex<T[FirstSegment], RestSegments>
      : never
    : T;

export interface IReference<T> {
  // 支持任意长度的路径段入参,自动推导最终引用类型
  property<Path extends any[]>(...path: Path): IReference<DeepIndex<T, Path>>;
  value(): T extends (...args: any) => any ? any : Promise<T>;
}

// 测试验证
const data = { foo: { bar: { value: 'foobar' }}}
declare const ref0: IReference<typeof data>

const ref1 = ref0.property('foo', 'bar', 'value')
const value = await ref1.value() // 类型自动推导为string

实现说明

  • DeepIndex工具类型会逐段校验路径合法性,递归匹配每一层的对象属性类型,路径遍历完成后返回最终属性的类型
  • property方法通过剩余参数泛型接收任意长度的路径段,将路径传入DeepIndex得到目标类型后,包装为IReference实例返回
  • 调用value()时会沿用原有逻辑,自动返回对应类型的Promise,函数类型的特殊处理逻辑也可以正常生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:15:02