arg?: T 可选参数与默认参数

最后更新:2026-10-22

arg?: T 可选参数与默认参数

? 标记可选参数(可以不传),= 给参数设默认值(不传时自动兜底)。两者都让调用方"只传必要的信息",是构造友好函数签名的第一工具。

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

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

📝 语法

function buildLabel(orderId: number, prefix = "ORD", note?: string): string {
  const base = `${prefix}-${String(orderId).padStart(5, "0")}`;
  return note ? `${base} (${note})` : base;
}

⚙️ 参数

prefix = "ORD"默认参数:缺省时使用该值,类型由默认值推断为 string
note?: string可选参数:不传时为 undefined,实际类型是 string | undefined,使用前需收窄

返回值:返回类型正常标注或推断;注意可选参数若参与运算,类型上要覆盖 undefined 分支。

▶ 示例

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

输出:

ORD-00042
VIP-00042
ORD-00042 (加急)

(转译后运行输出;不传 note 时它就是 undefined,标签里不会出现 "undefined" 字样)

💡 要点

ℹ️ 说明 可选参数必须排在必选参数之后;默认参数可写在任意位置,但写在中间时想跳过它要显式传 undefined。
⚠️ 注意 note?: string 的真实类型是 string | undefined,直接调用字符串方法会报错;先用 if (note) 收窄或改用默认参数。
💡 提示 参数超过 3 个时改传配置对象(options: { prefix?: string; note?: string }),比一长串位置参数更易读也更好扩展。
更多案例即将上线。

📚 相关教程

❓ 常见问题

Q 默认参数和可选参数能同时用吗?
A 可以且常见:prefix = "ORD" 既有默认值又可省略。纯 ? 参数不传时是 undefined,需要函数体自己兜底。
Q 可选参数后面还能放必选参数吗?
A 不能,编译器要求必选在前。默认参数写在中间时是例外:想跳过它要显式传 undefined,如 buildLabel(42, undefined, "加急")。
Q 默认参数和函数重载怎么选?
A 只是"少传几个参数"用默认值/可选参数;参数类型本身不同(string 或 Date 走不同逻辑)才需要重载。
Web-Tutorial.com

Web-Tutorial 技术团队

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

100%

🙏 帮我们做得更好

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

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