TypeScript 中的类型推断机制是如何工作的?
1. 变量初始化推断
- 当变量被声明并初始化时,TypeScript 根据初始值自动推断类型
- let x = 3 被推断为 number,let name = "Alice" 被推断为 string
- 使用 const 声明的变量会保留更精确的字面量类型,let 声明的变量会被"宽化"为一般类型
2. 最佳公共类型算法
- 当从多个表达式推断类型时,TypeScript 使用"最佳公共类型"算法计算兼容所有候选类型的公共类型
- 例如 let arr = [1, 2, 3] 推断为 number[],let mixed = [1, "two", 3] 推断为 (string | number)[]
- 如果数组元素类型没有公共超类型,则推断为联合类型的数组
3. 上下文类型(Contextual Typing)
- 当表达式处于具有已知类型的位置时,TypeScript 会根据该位置的类型推断表达式的类型
- 例如 window.onmousedown = function(event) 中,event 被推断为 MouseEvent 类型
- 上下文类型也适用于函数调用的参数、赋值的右侧、对象和数组字面量的成员等场景
4. 函数返回值推断
- 函数返回类型可以根据函数体自动推断
- 箭头函数和常规函数声明均支持返回值推断
- 当函数有多个返回路径时,返回类型推断为所有返回值的联合类型