gpt4 book ai didi

typescript - 转换联合类型的所有元素

转载 作者:行者123 更新时间:2023-12-03 08:19:22 32 4
gpt4 key购买 nike

BI想要修改联合类型中的每个元素。我还没有找到任何方法来实现这一目标。


简单示例

从此:

type U = string | number

我能做什么:

type A = U[] // (string | number)[]

我希望能够做什么:

type B = ... // string[] | number[]

最佳答案

您正在尝试分发 T -> Array<T> T 中对联合的类型运算。您可以使用distributive conditional types为此,请确保 T是一个类型参数,并对它进行任何条件类型检查,如下所示:

type DistributeArrayOverUnions<T> = T extends any ? T[] : never;
type B = DistributeArrayOverUnions<U> // string[] | number[];

DistributeArrayOverUnions<T>几乎只是在做T[] ,但是将其包装在 T extends any ? ... : never 中,我们在 T 中跨联合分配操作。这种分配是该支票的唯一目的;否则,这是一个空操作。


请注意,您需要通过两步过程来完成此操作;自 U只是一个类型,而不是类型参数,以下内容将不起作用,因为它不会分发:

type Bad = U extends any ? U[] : never; // type Bad = (string | number)[]

如果需要,可以使用 conditional type inference 将这两个步骤折叠成一行。将新类型参数引入作用域,如下所示:

type C = U extends infer T ? T extends any ? T[] : never : never;
// string[] | number[];

但这可能比两步过程更难看、更难解释,所以如果我是你,我会坚持这样做。

Playground link to code

关于typescript - 转换联合类型的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68323706/

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