面试题答案
一键面试代码示例
// 函数重载声明
function addNumbers(a: number, b: number): number;
function addNumbers(a: number, b: number, c: number): number;
// 函数实现,使用默认参数
function addNumbers(a: number, b: number, c?: number): number {
if (typeof c === 'number') {
return a + b + c;
}
return a + b;
}
代码逻辑
- 函数重载声明:
- 首先通过多个函数声明来定义不同参数形式的函数,这就是函数重载。在上述代码中,声明了
addNumbers(a: number, b: number): number
和addNumbers(a: number, b: number, c: number): number
,这两个声明定义了函数可以接受两个或三个参数的情况。
- 首先通过多个函数声明来定义不同参数形式的函数,这就是函数重载。在上述代码中,声明了
- 函数实现:
- 实际的函数实现中,使用了可选参数
c
。当调用函数时,TypeScript会根据传入的参数个数和类型,匹配到合适的函数重载声明。如果传入两个参数,会匹配到addNumbers(a: number, b: number): number
的声明;如果传入三个参数,会匹配到addNumbers(a: number, b: number, c: number): number
的声明。 - 在函数实现体中,通过
typeof c === 'number'
来判断是否传入了第三个参数c
,如果传入了则执行三个数相加,否则执行两个数相加。
- 实际的函数实现中,使用了可选参数
类型检查机制
TypeScript 的类型检查机制在编译阶段工作。当调用 addNumbers
函数时,编译器会根据传入参数的个数和类型,与函数重载声明进行匹配。例如:
const result1 = addNumbers(1, 2); // 匹配addNumbers(a: number, b: number): number
const result2 = addNumbers(1, 2, 3); // 匹配addNumbers(a: number, b: number, c: number): number
// 以下调用会报错,因为没有匹配的函数重载声明
// const result3 = addNumbers(1);
如果传入的参数无法匹配任何一个函数重载声明,TypeScript 编译器会报错,确保代码的类型安全。