JS可选参数注解的基础概念
JavaScript本身作为动态类型语言,没有原生的参数类型注解语法,实际开发中标注可选参数通常需要借助TypeScript的类型系统,或者JSDoc注释来实现。可选参数指的是函数在调用时可以不传入的参数,这类参数在注解时需要明确标识其可选性,避免类型检查报错。

TypeScript中标注可选参数的方式
TypeScript是JS的超集,提供了原生的类型注解语法,标注可选参数非常简单,只需要在参数名后添加问号?即可,同时可以搭配类型注解明确参数的类型。
基础可选参数标注示例
下面是一个简单的函数示例,函数接收两个参数,其中第二个参数为可选参数:
// 定义函数,b为可选参数,类型为number
function add(a: number, b?: number): number {
// 如果b未传入,默认使用0
if (b === undefined) {
return a;
}
return a + b;
}
// 调用示例
console.log(add(1)); // 输出1
console.log(add(1, 2)); // 输出3
上面的代码中,b?: number表示b是可选的数字类型参数,调用函数时可以不传入b,此时b的值为undefined。
可选参数搭配默认值的标注
如果可选参数有默认值,TypeScript会自动推断该参数为可选,此时不需要额外添加问号,直接标注类型和默认值即可:
// 有默认值的参数自动为可选参数
function multiply(a: number, b: number = 1): number {
return a * b;
}
console.log(multiply(3)); // 输出3,b使用默认值1
console.log(multiply(3, 2)); // 输出6
JSDoc注释标注可选参数的方式
如果项目没有使用TypeScript,只是纯JavaScript项目,可以通过JSDoc注释来标注可选参数,JSDoc是JS的文档注释标准,很多编辑器会识别JSDoc的类型注解提供类型提示。
基础JSDoc可选参数标注
使用@param标签标注参数,在参数名后添加=表示可选,同时标注参数类型:
/**
* 计算两个数的和
* @param {number} a 第一个数字
* @param {number} [b=0] 第二个数字,可选,默认值为0
* @returns {number} 两个数字的和
*/
function add(a, b = 0) {
return a + b;
}
console.log(add(2)); // 输出2
console.log(add(2, 3)); // 输出5
上面的注释中[b=0]表示b是可选参数,默认值为0,编辑器会根据注释提供对应的类型提示。
不同标注方式的适用场景
两种标注方式各有适用场景,具体选择可以参考下面的对比:
| 标注方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| TypeScript注解 | 使用TypeScript开发的项目 | 原生类型支持,类型检查更严格,报错更准确 | 需要额外编译步骤,项目配置成本稍高 |
| JSDoc注释 | 纯JavaScript项目,不需要编译 | 无需额外配置,直接写在JS文件中即可 | 类型检查能力弱于TypeScript,依赖编辑器支持 |
注意事项
- TypeScript中可选参数必须放在必选参数之后,否则会报语法错误。
- JSDoc的可选参数标注中,参数类型需要用大括号包裹,可选标识用方括号包裹。
- 如果可选参数可能为null,需要在类型注解中添加null类型,比如
b?: number | null。
正确的可选参数注解可以让代码的意图更清晰,减少调用方传入错误参数的概率,同时提升代码的维护效率,建议在实际开发中根据项目情况选择合适的注解方式。
JS注解可选参数函数注解TypeScript参数标注修改时间:2026-07-08 16:09:12