TypeScript中能否推断类实例取值函数的返回值具体类型?
实现保留具体属性类型的TypeScript取值函数
你当前的取值函数因为只对目标对象做了泛型约束,键参数仅声明为keyof T,返回值只能推断为所有属性类型的联合。要让TypeScript在传入固定键名时,精确返回对应属性的类型,只需要给键也加上泛型约束即可:
修改后的函数代码:
function getValueFromInstance<T, K extends keyof T>(target: T, key: K) { return target[key]; }
原理说明
新增的泛型参数K被约束为keyof T的子集,当你传入固定的键名(比如"someNumber")时,TypeScript会自动推断出K的具体类型,进而返回精确的T[K]类型,和直接访问实例属性的类型推断效果完全一致。
使用示例
class Example { someNumber:number = 1; someString:string = "test"; } const example = new Example(); const numValue = getValueFromInstance(example, "someNumber"); // type = number const strValue = getValueFromInstance(example, "someString"); // type = string
如果传入的是类型为keyof T的变量,返回值依然会是联合类型(这符合预期,因为变量可能指向任意属性):
let randomKey: keyof Example = "someNumber"; const mixedValue = getValueFromInstance(example, randomKey); // type = string | number
内容的提问来源于stack exchange,提问作者Katai
相关产品推荐
相关产品推荐

