...rest: T[] 剩余参数

最后更新:2026-10-22

...rest: T[] 剩余参数

剩余参数用 ...名字 收集"剩下的所有实参"为一个真数组(...scores: number[]),让函数接受任意个数的同类型参数——它是 arguments 的类型安全替代品。

分组函数与类
类型语法
严格模式不需要

ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。

📝 语法

function average(...scores: number[]): number {
  if (scores.length === 0) return 0;
  return scores.reduce((sum, s) => sum + s, 0) / scores.length;
}

// 位置参数 + 剩余参数:剩余参数必须是最后一项
function logRequest(method: string, ...fields: string[]): void;

⚙️ 参数

...scores: number[]剩余参数:所有多余实参收集进 number[];必须是参数列表的最后一项

返回值:与普通函数一致:显式标注或由函数体推断;剩余参数本身不改变返回值规则。

▶ 示例

修改下面的代码,点击试一试查看转译运行结果:

输出:

84.3
97.5
0

(转译后运行输出;average("90") 会得到编译错误——剩余参数的元素必须是 number)

💡 要点

ℹ️ 说明 剩余参数在运行时就是真数组,map/filter/reduce 随便用;这比旧的 arguments 对象(类数组、无类型)安全得多。
⚠️ 注意 ...args: any[] 会失去全部元素类型信息;尽量写具体的元素类型,或用泛型元组 ...args: T 逐位保留类型。
💡 提示 元组类型能给剩余参数"定型":...args: [name: string, retries: number] 表示第一个实参必须是 string、第二个必须是 number。
更多案例即将上线。

📚 相关教程

❓ 常见问题

Q ...scores: number[] 和 scores: number[] 有什么区别?
A 后者是"一个数组参数",调用要传 average([90, 85]);前者是"任意多个数字实参",直接 average(90, 85)。调用方手里已有数组时,用普通数组参数更顺手。
Q 剩余参数能放在参数列表中间吗?
A 不能。它必须排最后——"剩余"的定义就是收集后面所有的实参,放在中间编译器直接报错。
Q 泛型剩余参数有什么用?
A <T extends any[]>(...args: T) 把实参收集为元组类型 T,各元素类型逐位保留,是写 wrap/decorate 这类"透传参数"工具的关键技巧。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏