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 走不同逻辑)才需要重载。