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

TypeScript中如何使用索引类型访问嵌套属性名对应的方法

问题原因

你定义的meth为string类型过于宽泛,TypeScript无法保证任意字符串一定是你选中的prop属性下的合法方法名,因此触发了索引类型的安全校验报错。

解决方式

固定属性场景

如果已经确定要访问的属性名,可以直接收窄方法名的类型为对应属性下的键集合:

type Property = keyof MyClass;
const obj = new MyClass();
const prop: Property = 'prop1';
// 直接将meth的类型限定为prop对应属性下的合法键
const meth: keyof MyClass[typeof prop] = 'method2';

obj[prop][meth](); // 编译正常

动态传参场景

如果需要动态传入属性名和方法名,可以通过泛型工具函数约束两者的对应关系,保证传入的方法名一定属于对应属性的合法键:

function callNestedMethod<T extends keyof MyClass>(
  instance: MyClass,
  prop: T,
  methodName: keyof MyClass[T]
) {
  return instance[prop][methodName]();
}

// 调用时自动校验合法性
callNestedMethod(obj, 'prop1', 'method2'); // 合法
callNestedMethod(obj, 'prop1', 'method3'); // 编译阶段直接报错:prop1下不存在method3
拓展说明

如果需要复用嵌套方法名的类型规则,可以单独定义泛型类型别名:

type NestedMethod<T extends keyof MyClass> = keyof MyClass[T];

// 使用示例
const meth1: NestedMethod<'prop1'> = 'method1'; // 合法
const meth2: NestedMethod<'prop2'> = 'method3'; // 合法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:48:02