# 可选参数
在本教程中,你将学习如何使用 TypeScript 中的函数的可选参数。
在 JavaScript 中,即使函数指定了参数,也可以在调用它的时候不传入任何参数,因为 JavaScript 默认支持可选参数。而在 TypeScript 中,编译器会检查每个函数的调用情况,并在以下情况中抛出错误提示:
- 实参的数量和函数中指定的形参的数量不同;
- 或者实参的类型和函数形参的类型不兼容。
因为编译器会彻查传递给函数的参数,我们可以使用可选参数告诉编译器参数是可选的,在不存在的情况下不发出错误提示。
要使函数的参数是可选的,可以在参数名后面添加 ? 符号,如下所示:
function multiply(a: number, b: number, c?: number): number {
  if (typeof c !== 'undefined') {
    return a * b * c;
  }
  return a * b;
}
1
2
3
4
5
6
2
3
4
5
6
它是这样工作的:
- 首先,在 c参数后面添加?符号;
- 然后,通过表达式 typeof c !== 'undefined'检查c参数是否传递给了函数。
注意:如果你用表达式
if(c)来检查参数是否被初始化,你会发现空字符串和0也被视为undefined,这种判断是有问题的。
可选参数必须出现在参数列表中必选参数的后面。例如,如果你把 b 设置为可选参数,而 c 是必须参数,TypeScript 编译器会抛出一个错误提示:
function multiply(a: number, b?: number, c: number): number {
  if (typeof c !== 'undefined') {
    return a * b * c;
  }
  return a * b;
}
1
2
3
4
5
6
2
3
4
5
6
错误提示:
error TS1016: A required parameter cannot follow an optional parameter.
1
# 小结
- 使用 parameter?: type语法把参数设置为可选的;
- 使用 typeof(parameter) !== 'undefined'表达式来检查可选参数是否初始化了。