面试题答案
一键面试TypeScript 类型推断机制在函数重载与联合类型嵌套场景下的工作方式
- 类型推断基础:TypeScript 根据初始化值或上下文来推断变量类型。在函数调用时,它会尝试根据传入参数的类型推断出函数返回值类型。
- 函数重载影响:函数重载允许一个函数有多个不同参数列表和返回类型的定义。TypeScript 在解析函数调用时,会按照重载定义的顺序依次匹配,选择第一个匹配成功的重载定义。这意味着函数重载的顺序很重要,更具体的重载应该排在前面。
- 联合类型影响:联合类型表示一个值可以是多种类型之一。当函数参数或返回值使用联合类型时,TypeScript 会根据具体使用场景推断出更具体的类型。例如,在条件语句中,可以基于联合类型中的某个类型进行操作,TypeScript 会在该分支内将变量推断为该具体类型。
函数重载和联合类型对类型兼容性的影响
- 函数重载:不同的重载定义必须保证参数和返回类型的兼容性。参数类型需要满足调用者传入参数的类型要求,返回类型要与调用者期望的类型兼容。
- 联合类型:联合类型中的每个类型必须相互兼容,在赋值或函数参数传递时,值的类型必须是联合类型中的一种。
实际代码示例
// 函数重载定义
function processValue(value: string): string;
function processValue(value: number): number;
function processValue(value: boolean): boolean;
// 函数实现
function processValue(value: string | number | boolean): string | number | boolean {
if (typeof value ==='string') {
return value.toUpperCase();
} else if (typeof value === 'number') {
return value * 2;
} else {
return!value;
}
}
// 使用示例
const result1 = processValue('hello'); // result1 类型推断为 string
const result2 = processValue(10); // result2 类型推断为 number
const result3 = processValue(true); // result3 类型推断为 boolean
在上述示例中,通过函数重载为 processValue
定义了不同参数类型和返回类型的版本。函数实现中根据传入参数的实际类型进行不同的操作,确保了类型安全性。调用函数时,TypeScript 能准确推断出返回值的类型,提高了代码的可读性。