面试题答案
一键面试1. TypeScript 类型推断机制在可选参数中的工作原理
在 TypeScript 中,当函数定义了可选参数(使用 ?
符号)时,类型推断机制会根据函数调用时是否提供该参数来推断其类型。如果调用时未提供该可选参数,TypeScript 会推断其类型为 undefined
。如果提供了参数,TypeScript 会根据传入值的类型进行推断。
2. 函数重载且部分重载版本涉及可选参数时对类型推断的影响
当函数被重载且部分重载版本涉及可选参数时,TypeScript 的类型推断会根据调用时提供的参数数量和类型,匹配最合适的重载版本。如果提供的参数数量和类型与某个重载版本完全匹配,则使用该版本的返回类型。如果提供的参数数量不足,TypeScript 会尝试匹配带有可选参数的重载版本。
3. 具体代码示例及分析
// 函数重载声明
function addNumbers(a: number, b: number): number;
function addNumbers(a: number, b?: number): number | undefined;
// 函数实现
function addNumbers(a: number, b?: number): number | undefined {
if (b!== undefined) {
return a + b;
}
return undefined;
}
// 调用示例 1:提供两个参数
const result1 = addNumbers(1, 2); // 类型推断为 number,因为匹配了第一个重载版本
console.log(result1); // 输出: 3
// 调用示例 2:只提供一个参数
const result2 = addNumbers(1); // 类型推断为 number | undefined,因为匹配了第二个重载版本
console.log(result2); // 输出: undefined
在上述代码中:
- 我们首先对
addNumbers
函数进行了重载声明。第一个重载版本接受两个number
类型参数并返回number
类型。第二个重载版本接受一个number
类型参数和一个可选的number
类型参数,并返回number | undefined
类型。 - 在函数实现中,根据是否传入第二个参数来决定返回值。
- 在调用
addNumbers
函数时,根据提供参数的情况,TypeScript 会正确推断返回值的类型。当提供两个参数时,匹配第一个重载版本,返回值类型为number
;当只提供一个参数时,匹配第二个重载版本,返回值类型为number | undefined
。