typescript - 输入一个函数接收字符串数组并返回一个记录,每个字符串都有一个键
问题描述
我想输入一个输入是字符串数组的函数。输出是一个对象,每个输入字符串都有一个键。
这是一个示例实现:
const getMyObject = (...keys: string[]) => keys.reduce((object, key) => ({
...object,
[key]: `some-computed-value-${key}`,
}),
{},
)
所以我不能安全地写这样的东西:
const { keyA, keyB } = getMyObject('keyA', 'keyB');
但我不知道如何正确键入此函数。
解决方案
你可以使用这个:
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 不知道这一点。