// 函数重载声明
function addNumbers(a: number): number;
function addNumbers(a: number, b: number): number;
function addNumbers(a: number, b?: number): number {
if (b === undefined) {
return a;
}
return a + b;
}
// 调用示例
console.log(addNumbers(5)); // 输出: 5
console.log(addNumbers(5, 3)); // 输出: 8
可选参数的作用
- 灵活性:可选参数为函数调用提供了更多的灵活性。在上述例子中,
addNumbers
函数既可以接受一个参数,也可以接受两个参数。当调用者只需要传入一个参数时,不必提供第二个参数,函数依然能够正常工作。
- 减少函数重载数量:如果没有可选参数,我们可能需要为不同参数数量的情况编写更多的函数重载,使代码变得冗长。可选参数机制允许在一个函数实现中处理多种调用场景。
类型检查机制
- 重载签名匹配:TypeScript在编译时会根据函数调用的参数数量和类型,匹配最适合的函数重载签名。例如,当调用
addNumbers(5)
时,会匹配function addNumbers(a: number): number;
这个重载签名;当调用addNumbers(5, 3)
时,会匹配function addNumbers(a: number, b: number): number;
这个重载签名。
- 实现检查:函数的实现必须满足所有的重载签名。在上述例子中,
addNumbers
函数的实现要确保在传入一个参数或两个参数时都能正确处理,并且返回值类型也要符合重载签名的定义。如果实现与重载签名不匹配,TypeScript编译器会报错。