gpt4 book ai didi

typescript - 需要 TypeScript 数组中的特定项

转载 作者:行者123 更新时间:2023-12-04 07:22:36 24 4
gpt4 key购买 nike

如何在 typescript 数组中编写对特定项目的要求?例如,让我们考虑“至少有一个数字 7 的数字数组”。似乎要求特定元素为 7 很容易,但要求“其中一个元素”更难。
我尝试了以下方法。但是,它会产生 Type alias 'ContainsSeven' circularly references itself. ts(2456) 错误。

type ContainsSeven =
|[7, ...Array<number>]
|[number, ...ContainsSeven]

const example1: ContainsSeven = [1,2,7]
const example2: ContainsSeven = [1,7,2]
const example3: ContainsSeven = [7,1,2]

// @ts-expect-error
const counter1: ContainsSeven = []
// @ts-expect-error
const counter2: ContainsSeven = [1,2,3]
我的最终目标是使用标准 JavaScript 数组而不是自定义链接结构来实现生成器的延迟连接。有关更全面的示例,请参阅 related diff

最佳答案

这是可行的,但有功能助手:

type IsValid<T extends number[]> = 7 extends T[number] ? T : never

const withSeven = <T extends number, List extends T[]>(list: IsValid<[...List]>) => list

withSeven([1, 2, 3, 4, 5, 7]) // ok

withSeven([1, 2, 3, 4, 5]) // error

IsValid检查数组的元素之一是否为 7。如果是 7 - 返回数组,否则 - 返回 never .
有关类型验证的更多信息,您可以在我的 here 中找到和 here
关于 circularly references ,我敢打赌 this问题/答案与您的问题有关

关于typescript - 需要 TypeScript 数组中的特定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68404097/

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