gpt4 book ai didi

typescript - 从带有元组的联合中排除 `unknown[]`?

转载 作者:行者123 更新时间:2023-12-04 09:45:55 26 4
gpt4 key购买 nike

我认为这是不可能的,但我想在 github 上提出问题之前先在这里问一下。

我有一个看起来像这样的类型:

type X = [string, number] | unknown[]

我想提取 [string, number]部分。这可能吗?这不起作用:

type Y = Exclude<X, unknown[]>

以上, Ynever .我明白为什么,因为 [string, number]扩展 unknown[] ,因此通过排除它,工会的双方都被“拒绝”。但是有没有什么聪明的条件类型可以用来摆脱 unknown[] ?

注意:我没有定义 X我自己,我正在尝试编写一个函数签名,其中一种中间类型看起来像 [string, number] | unknown[] .所以我不能只使用 [string, number]直接地。

最佳答案

来自 docs 中的示例

In an intersection everything absorbs unknown



我们可以创建与真实类型毫无共同之处的类型,例如:
type Noop = { __noop: '__noop' };

然后在条件类型中,我们可以检查数组项的交集是否扩展了我们的假类型,如果是 - 排除它(我们知道它必须是 unknown ):
type ExcludeUnknown<T> = T extends Array<infer I>
? Noop extends (I & Noop) ? never : T
: T;

type Y = ExcludeUnknown<X>; // [string, number]

Playground

** 请注意,这不适用于包含 {} 的元组, objectunknown (例如 [string, number, {}] )

关于typescript - 从带有元组的联合中排除 `unknown[]`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62118966/

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