打字稿:如何键入大小不同的未知元组?

Ben

我在类似的问题中找不到这个。

我试图输入一个元素数量未知的元组。
我知道Typescript 4添加了对可变参数元组的支持

尽管我阅读了文档,但仍无法解决问题

这个例子很简单:


function map<S, T, U, Z>(values: [S, T, U], mapper: (s: S, t: T, u: U) => Z): Z {
    return mapper(...values);
}


const v = map([1, 'hello', 3], (s, t, u) => `${s + t + u}`);

打字稿游乐场链接

这适用于3个元素,但不适用于任何(动态)数量的元素。
如何以通用方式键入任意数量的元素?

谢谢!

塔德·麦当劳·詹森

您的数据代表数组的某种扩展,因此有一个通用的方法,例如Elems extends unknown[],技巧是将其指定[...Elems]为第一个参数,而不仅仅是Elems这表明要打字稿,它应该尝试保留输入的任何元组*。

function map<Elems extends unknown[],  Z>(values: [...Elems], mapper: (...args: Elems) => Z): Z {
    return mapper(...values);
}


const v = map([1, 'hello', 3], (s, t, u) => `${s + t + u}`);

游乐场链接

*当我说它保留元组时,这只是通用解析如何工作的副产品,如果我有以下两个功能:

function foo<T               >(arg: T){ return arg; }
function bar<T extends string>(arg: T){ return arg; }

调用foo("a")将给出类型,stringbar("a")给出type "a",这是因为如果可能的话,typescript将变得更加具体,以适合通用约束,因此虽然Elems在功能上与相同[...Elems],但第一个被视为数组类型,第二个被视为元组类型,这就是为什么泛型的解析方式不同,保留了元组。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在打字稿中显式定义具有不同元组类型的元组数组?

来自分类Dev

打字稿:如何键入React抽象组件?

来自分类Dev

打字稿:如何键入可变参数?

来自分类Dev

如何在打字稿中使用不同类型的通用键键入对象

来自分类常见问题

打字稿-键入接口?

来自分类Dev

打字稿-键入接口?

来自分类Dev

未知的打字稿构造

来自分类Dev

未知的打字稿构造

来自分类Dev

如何使用打字稿键入Vue.component?

来自分类Dev

如何在打字稿中键入通用合并功能

来自分类Dev

如何在打字稿中键入部分应用的函数?

来自分类Dev

如何在打字稿中键入以下对象/类型

来自分类Dev

如何在打字稿中键入对象键?

来自分类Dev

如何刪除打字稿中的未知屬性

来自分类Dev

遇到错误:如何从打字稿中正确使用已翻译和键入的打字稿npm模块?

来自分类Dev

如何使用Array.map将打字稿元组映射到新元组

来自分类Dev

打字稿遍历键入的对象键

来自分类Dev

策略-键入打字稿的字符串

来自分类Dev

键入通用打字稿结构的问题

来自分类Dev

打字稿构造函数参数工厂键入

来自分类Dev

在打字稿中键入交集

来自分类Dev

lodash流函数应如何在打字稿中键入?

来自分类Dev

打字稿:在这种情况下如何使用泛型键入函数?

来自分类Dev

如何用打字稿键入单个参数和其余参数的并集?

来自分类Dev

如何在打字稿中键入以防止返回值

来自分类Dev

如何在打字稿中的对象文字中键入带有“ this”的方法?

来自分类Dev

我如何在打字稿中的嵌套for ... in循环中正确键入索引签名?

来自分类Dev

打字稿2:如何添加到现有界面或键入?

来自分类Dev

打字稿:元组到联合类型

Related 相关文章

热门标签

归档