TypeScript类泛型方法如何根据入参key推断对象对应value类型
问题根源
你当前的写法将K extends keyof T定义为类的全局泛型参数,TypeScript 在实例化 Store 类时就会将K推导为泛型T所有键的联合类型(对应当前示例就是'name' | 'age'),因此后续调用get方法无论传入什么具体键,返回值都会被推导为所有值类型的联合string | number。
解决方案
将泛型参数K的声明从类层级下移到get方法层级,让每次调用get方法时,再根据传入的具体键单独推导类型,即可精确匹配对应值的类型。
修改后的完整代码如下:
interface Person { name: string; age: number; } // 类仅保留T泛型 class Store<T> { constructor(private obj: T) { } // K泛型定义在get方法层级,每次调用单独推导 get<K extends keyof T>(key: K): T[K] { return this.obj[key]; } } const person: Person = { name: 'John', age: 99 }; const store = new Store(person); const value = store.get('name'); // value类型自动推导为string
修改后调用store.get('name')时返回值类型自动推导为string,调用store.get('age')时返回值类型自动推导为number,符合需求。
内容的提问来源于stack exchange,提问作者Daniel Rodríguez Meza
相关产品推荐
相关产品推荐

