【发布时间】:2023-04-04 23:02:01
【问题描述】:
我正在尝试创建一个函数来将字符串值数组映射到 Typescript 中的泛型类型。数组中值的索引与对象中的键具有相同的索引。例如:
我有一个Person 接口
interface Person {
lastName: string;
firstName: string;
}
一组值
const values = ['foo', 'bar']
而想要的结果是Person的实例
{
lastName: 'foo',
firstName: 'bar'
}
所需的函数类型应如下所示
const parse = <T extends Record<string, string | undefined>>(values: Array<string | undefined>)<T> => {
...
}
const result: Person = parse(['foo', 'bar']);
将 2 个数组映射到一个对象没有问题,但我希望输入返回的泛型以使事情变得更容易。 Object.keys(T) 或 for key in T 之类的东西不起作用,因此很难获得键的索引。
您可以传递具有 100 个属性的泛型和具有 5 个值的数组,并且只应分配前 5 个属性,其他属性为 null 或未定义。反之亦然,您可以传递具有 3 个属性的泛型和具有 100 个值的数组,但只使用前 3 个。该数组可以包含undefined or null
【问题讨论】:
-
应该
parse总是期望两个元素数组? -
不,您可以传递具有 100 个属性和 5 个长数组的泛型,并且只应分配前 5 个,其他为未定义的空值。反之亦然,您可以传递具有 3 个属性和 100 个值的数组的泛型,但只使用前 3 个。
标签: typescript reflection typescript-generics