gpt4 book ai didi

typescript - 通过泛型在 TypeScript 中将元组转换为对象

转载 作者:行者123 更新时间:2023-12-04 00:02:47 26 4
gpt4 key购买 nike

我正在尝试将 TypeScript 中的元组联合转换为对象,而不会丢失任何类型。

这是它如何工作的示例:

type Tuples = ["foo", string] | ["bar", boolean] | ["baz", null];

/*
ideally the type would be:
{
foo: string;
bar: boolean;
baz: null;
}
*/
type AsObject = DoSomething<Tuples>;

上述问题的一个简单解决方案是:
type TupleToObject<T extends [string, any]> = { [key in T[0]]: T[1] };

/*
type is:
{
foo: string | boolean | null;
bar: string | boolean | null;
baz: string | boolean | null;
}
*/
type TypesLost = TupleToObject<Tuples>;

然而,我们丢失了一些类型信息,因为所有值都集中在一个联合类型中。

我正在寻找一种使用不会丢失此类型信息的泛型的解决方案,并且希望能更深入地了解在 TypeScript 中映射泛型元组。

最佳答案

您可以使用 Extract 获得所需的效果.基本思想是我们将从 T 中提取联合中对应于公共(public) key 的适当类型:

type Tuples = ["foo", string] | ["bar", boolean] | ["baz", null];
type TupleToObject<T extends [string, any]> = { [key in T[0]]: Extract<T, [key, any]>[1] };

/*
type is:
{
foo: string;
bar: boolean;
baz: null;
}
*/
type TypesLost = TupleToObject<Tuples>;

关于typescript - 通过泛型在 TypeScript 中将元组转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56988970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com