TypeScript 在使用泛型类型的属性作为键时,使用keyof抛出TS2536错误,

0lvr5msh  于 5个月前  发布在  TypeScript
关注(0)|答案(1)|浏览(72)

根据题目,我们需要使用 TypeScript 3.8.0-dev.20200204 版本,并解决以下问题:

  • TS2536

  • generic typing

  • keyof

代码如下:

type Fruit = 'apple' | 'banana' | 'orange';

const fruits: Fruit[] = ['apple', 'banana'];

function getFruitName<T extends Fruit>(fruits: T[], index: number): string {
  return fruits[index as keyof T];
}

console.log(getFruitName(fruits, 1)); // 输出 "banana"

预期行为:只要使用了正确的键,就不会引发错误。

实际行为:编译时会抛出 TS2536 错误,尽管由于泛型类型,我们应该知道这些键。

5vf7fwbs

5vf7fwbs1#

我认为这可能是属性查找被推迟的设计限制,但无论如何,你可以这样写:

function getValue<T, K extends keyof T>(result: GenericType & { value: T }, key: K): T[K] {
    return result.value[key];
}

或者

function getValue<T, K extends keyof T>(result: { value: T }, key: K): T[K] {
    return result.value[key];
}

相关问题