首页 > 解决方案 > 在 Typescript 中,返回类型值取决于通过参数提供的 Object 中的键

问题描述

我尝试像下面这样返回各种类型取决于输入字符串键,但它不起作用。

如何使getSpecificData函数返回我想要的类型?

type Data = {
  foo: string;
  bar: number;
  baz: boolean;
};

function getSpecificData<D>(data: D, dataKey: keyof D): D[keyof D] {
  return data[dataKey];
}

const sampleData: Data = {
  foo: 'hello',
  bar: 123,
  baz: false,
};

const foo: string = getSpecificData(sampleData, 'foo'); // the function returns string|number|boolean
const bar: number = getSpecificData(sampleData, 'bar');
const baz: boolean = getSpecificData(sampleData, 'baz');

链接到 Typescript 游乐场

标签: typescript

解决方案


为了获取您提供的特定键的值类型,键和值都需要是通用的。 D[keyof D]是所有可能值类型的联合,但D[K]会给我们一个给定键的正确值K

function getSpecificData<D, K extends keyof D>(data: D, dataKey: K): D[K] {
  return data[dataKey];
}

这允许 Typescript 返回与提供的键关联的特定值类型。现在所有这些示例都有效:

const foo: string = getSpecificData(sampleData, 'foo');
const bar: number = getSpecificData(sampleData, 'bar');
const baz: boolean = getSpecificData(sampleData, 'baz');

打字稿游乐场链接


推荐阅读