首页 > 解决方案 > 输入一个函数接收字符串数组并返回一个记录,每个字符串都有一个键

问题描述

我想输入一个输入是字符串数组的函数。输出是一个对象,每个输入字符串都有一个键。

这是一个示例实现:

const getMyObject = (...keys: string[]) => keys.reduce((object, key) => ({
    ...object,
    [key]: `some-computed-value-${key}`,
  }), 
  {},
)

所以我不能安全地写这样的东西:

const { keyA, keyB } = getMyObject('keyA', 'keyB');

但我不知道如何正确键入此函数。

标签: typescript

解决方案


你可以使用这个:

const getMyObject = <K extends string>(
  ...keys: K[]
// Record<K, TypeOfTheComputedValues>
): Record<K, string> => keys.reduce((object, key) => ({
    ...object,
    [key]: `some-computed-value-${key}`,
  }), 
  {},
) as Record<K, string>;

这仍然需要一个类型断言,因为累加器的类型reduce直到Record<K, string>最后一次迭代才出现,而 TypeScript 不知道这一点。

游乐场链接


推荐阅读