打字稿:如何将项目添加到元组?

努尔伯·阿尔皮斯巴耶夫

为什么会产生错误“其余元素类型必须是数组类型”?

type QWE<T extends [number, string]> = [boolean, ...T]
                                                 ^^^^ the error is here
提香·切尔尼科娃·德拉戈米尔

在3.0之前,我们无法将元组或泛型类型参数散布到函数中,因此必须将其实现。同样,当前在元组中的其余部分仅支持数组,没有人实现将其他元组扩展到给定元组的其余部分的功能,而我猜测实现它需要大量的工作和复杂性。

要在另一个已知元组的末尾添加元组,我们可以使用以下功能:将元组分布到一个函数中,然后将参数类型提取为元组。

type ArgumentTypes<T extends (...a: any) => any> =
    T extends (...a: infer A) => any ? A : never;
type QWE<T extends [number, string]> = 
    ArgumentTypes<(a: boolean, ...r: T) => void>

type R = QWE<[number, string]>

在开始时添加元组存在更多问题,我相信有一些非常不推荐的技巧可以使用递归类型别名来实现。您还可以定义多个条件以在一个元组中最多支持多个元素,但如果可能的话,我会避免使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章