typescript 中 t extends unknown[] 的谜团
在 TypeScript 中,“T extends unknown[]”表示类型 T 必须是未知长度的数组或元组。但是,为什么某些情况下应有三个参数呢?
让我们从一个示例函数 call 开始,它接受一个函数 f 和一组参数 args,并调用 f(args),其中 args 的类型由 T 决定。
function call<T extends unknown[], R>(
f: (...args: T) => R,
...args: T
): R {
return f(...args);
}例如,考虑 fill 函数,它接受一个长度和一个值,并返回一个充满该值的数组:
function fill(length: number, value: string): string[] {
return Array.from({ length }, () => value);
}现在,我们可以使用 call 来调用 fill:
let aa = call(fill, 10, 'a'); // 返回 ["a", "a", ...] let bb = call(fill, 10); // 错误:需要 3 个参数 let cc = call(fill, 10, 'a', 'z'); // 错误:需要 3 个参数
为什么 bb 和 cc 会报错呢?因为 fill 函数需要三个参数,而 call 的签名要求 args 的数量与 T 的长度相匹配。这意味着,即使 bb 只传递了两个参数,它也必须是长度为 2 的数组或元组。类似地,cc 传递了四个参数,而它应该是一个长度为 3 的数组或元组。
因此,在使用 call 时,必须确保 args 的长度与 T 的长度相匹配。否则,TypeScript 编译器会发出参数数量不匹配的错误。
以上就是TypeScript中T extends unknown[]类型约束下,参数数量不匹配的原因是什么?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号