使用函数获取类实例中的值时是否可以推断出该值的类型?

问题描述 投票:0回答:1

我想知道是否可以编写一个保留输入的函数,并且与此等效:

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"
是代码中的固定值而不是来自变量?

typescript
1个回答
0
投票

您没有获得类成员键的正确对应值类型是因为您使用

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

TypeScript 游乐场

© www.soinside.com 2019 - 2024. All rights reserved.