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

TypeScript传入类到函数无法推断类成员key的问题

问题原因及解决方法

问题根源

核心问题是类型推断的对象不一致:

  • 把Foo作为参数传入foo函数时,泛型C被推断为构造函数的类型(也就是typeof Foo,对应类本身这个对象的类型),此时keyof C取到的是构造函数自身的属性(比如prototype、name、length这些原型链相关的key),而非实例的成员。
  • 直接写type Keys = keyof Foo时,TypeScript会自动把Foo解析为类的实例类型,所以能正确拿到实例的bar属性。

解决方法

修改函数的泛型约束,让它接收构造函数类型,再通过InstanceType<C>获取实例类型,进而限制key为实例的成员:

class Foo {
  bar: string;
}

// 泛型C约束为任意构造函数类型
function foo<C extends new (...args: any[]) => any>(comp: C, key: keyof InstanceType<C>) {

}

foo(Foo, 'bar') // 现在能正确提示bar,传入无效key会报错

这样修改后,函数会基于构造函数推断出实例的类型,从而正确约束key参数为实例的成员属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:30:48