我想知道是否可以编写一个保留输入的函数,并且与此等效:
class Example {
someNumber:number = 1;
someString:string = "test";
}
const example = new Example();
const value = example.someNumber; // type = number
我希望能够输入这种功能:
function getValueFromInstance<T>( target:T, key:keyof T ) {
return target[ key ];
}
const value = getValueFromInstance( example, "someNumber" ); // type = string | number
TypeScript 已经认识到这里可能的结果只能是
string
或 number
,但是我可以以某种方式进一步推动它以区分两者吗?特别是如果 "someNumber"
是代码中的固定值而不是来自变量?
您没有获得类成员键的正确对应值类型是因为您使用
T
索引 keyof T
。这将始终返回所有可能值类型的并集。
相反,使用通用约束来推断一种特定的 keyof
T
以便索引一种类型。
class Example {
someNumber: number = 1;
someString: string = "test";
}
declare const example: Example;
function getValueFromInstance<T, K extends keyof T>(target: T, key: K) {
return target[key];
}
const value = getValueFromInstance(example, "someNumber");
// ^? const value: number