我在类似的问题中找不到这个。
我正在尝试输入一个元素数量未知的元组。
我知道 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}`);
Run Code Online (Sandbox Code Playgroud)
这适用于 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}`);
Run Code Online (Sandbox Code Playgroud)
(游乐场链接)
*当我说它保留元组性时,如果我有两个这样的函数,这只是通用解析工作方式的一个副产品:
function foo<T >(arg: T){ return arg; }
function bar<T extends string>(arg: T){ return arg; }
Run Code Online (Sandbox Code Playgroud)
调用foo("a")将给出 typestring但bar("a")给出 type "a",这是因为如果可能的话,打字稿会更具体地适应泛型约束,所以虽然Elems在功能上与 相同[...Elems],但第一个被认为是数组类型,第二个被认为是元组类型,这就是为什么generic 解析不同,保留元组性。
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |