面试题答案
一键面试函数参数的类型推断规则
- 基于赋值推断:当函数参数被赋值给一个具有明确类型的变量时,TypeScript 会推断参数的类型与该变量类型一致。例如:
let num: number = 10;
function add(a: number, b: number) {
return a + b;
}
add(num, 20);
这里 add
函数参数 a
和 b
推断为 number
类型,因为 num
是 number
类型。
- 上下文类型推断:TypeScript 可以根据函数调用的上下文推断参数类型。例如:
function printLength(str: string) {
console.log(str.length);
}
// 上下文推断 'hello' 是字符串类型,所以函数参数推断为 string
printLength('hello');
- 默认参数推断:如果函数参数有默认值,TypeScript 会根据默认值推断参数类型。例如:
function greet(name = 'world') {
console.log(`Hello, ${name}`);
}
// 推断 name 参数类型为 string
greet();
greet('John');
函数重载情况下的类型推断
函数重载允许一个函数有多个不同参数列表的定义。TypeScript 会根据调用时提供的参数,从重载定义中选择最合适的函数实现。例如:
// 函数重载定义
function add(a: number, b: number): number;
function add(a: string, b: string): string;
// 实际实现
function add(a: any, b: any): any {
return a + b;
}
let result1 = add(1, 2);
// 这里根据第一个重载定义,推断返回值为 number 类型
let result2 = add('a', 'b');
// 这里根据第二个重载定义,推断返回值为 string 类型
在上述代码中,TypeScript 根据调用 add
函数时传入参数的类型,选择对应的重载定义,从而推断出正确的返回值类型。如果传入的参数与任何重载定义都不匹配,TypeScript 会报错。