MST

星途 面试题库

面试题:TypeScript类型推断之中等难度题

请解释TypeScript中函数参数的类型推断规则,并举例说明在函数重载的情况下,类型推断是如何工作的。
14.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

函数参数的类型推断规则

  1. 基于赋值推断:当函数参数被赋值给一个具有明确类型的变量时,TypeScript 会推断参数的类型与该变量类型一致。例如:
let num: number = 10;
function add(a: number, b: number) {
    return a + b;
}
add(num, 20); 

这里 add 函数参数 ab 推断为 number 类型,因为 numnumber 类型。

  1. 上下文类型推断:TypeScript 可以根据函数调用的上下文推断参数类型。例如:
function printLength(str: string) {
    console.log(str.length);
}
// 上下文推断 'hello' 是字符串类型,所以函数参数推断为 string
printLength('hello'); 
  1. 默认参数推断:如果函数参数有默认值,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 会报错。