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

TypeScript如何约束泛型函数参数为合法的嵌套属性名

这个需求完全可以实现,通过TypeScript的泛型约束和索引类型就能实现你要的参数类型校验效果,修改后的函数定义如下:

function getFieldPath<T, K extends keyof T, P extends keyof T[K]>(fieldA: K, fieldB: P): string {
  return `${fieldA as string}.${fieldB as string}`;
}

类型说明

  • 泛型T是传入的根类型,对应你示例中的Hero、Monster
  • 泛型K被约束为T的一级键,对应参数fieldA,确保只能传入T的合法一级属性
  • 泛型P被约束为T[K]的键,对应参数fieldB,确保只能传入fieldA对应属性下的合法子属性

校验效果完全符合你的预期

  • getFieldPath<Monster>('stat', 'str'):类型校验通过,无报错
  • getFieldPath<Monster>('stat', 'int'):TypeScript抛出类型错误,提示int不是Monster['stat']的合法属性
  • getFieldPath<Hero>('stat', 'str'):TypeScript抛出类型错误,提示str不是Hero['stat']的合法属性
  • getFieldPath<Hero>('stat', 'int'):类型校验通过,无报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:39:03