TypeScript 的类型推论(Type Inference)是一种自动推导变量和表达式的类型的机制。当你声明一个变量并赋予它一个初始值,TypeScript 会根据这个初始值的类型来推断该变量的类型。以下是一些关于类型推论的基本概念:

1. 基础类型推论:
   当你声明一个变量并赋予它一个初始值,TypeScript 会根据该初始值的类型推断出变量的类型。
   let x = 10; // 类型推断为 number
   let y = "hello"; // 类型推断为 string

2. 最佳通用类型:
   当一个变量被赋予多个类型的值时,TypeScript 会推断出一个最适合的通用类型。
   let values = [1, "two", true]; // 类型推断为 (string | number | boolean)[]

3. 上下文类型推论:
   当一个表达式的类型与所期望的类型一致时,TypeScript 会使用所期望的类型来推断表达式的类型。
   window.onmousedown = function (mouseEvent) {
       console.log(mouseEvent.button); // 类型推断为 MouseEvent
   };

4. 函数返回值类型推论:
   当函数有返回值时,TypeScript 会根据 return 语句的类型推断函数的返回值类型。
   function add(a: number, b: number) {
       return a + b; // 返回值类型推断为 number
   }

5. 显示注解类型:
   在某些情况下,你可能想要显式地为变量或函数参数提供类型注解,而不依赖于类型推论。
   let z: number = 5; // 显式注解类型为 number

   function multiply(a: number, b: number): number {
       return a * b; // 显式注解返回值类型为 number
   }

6. 结构化类型推论:
   TypeScript 是基于结构化类型的,这意味着类型推论会考虑对象的形状而不是明确的类型注解。
   interface Point {
       x: number;
       y: number;
   }

   let point = { x: 10, y: 20 }; // 类型推断为 Point

7. 默认参数和可选参数类型推论:
   当函数有默认参数或可选参数时,TypeScript 会推断出相应的参数类型。
   function greet(name = "world", age?: number) {
       console.log(`Hello, ${name}! Age: ${age}`);
   }

   greet(); // 类型推断 name 为 string,age 为 undefined
   greet("Alice", 25); // 类型推断 name 为 string,age 为 number

类型推论使得代码更加简洁,同时保持了类型安全。在大部分情况下,TypeScript 可以通过类型推论准确地确定变量和表达式的类型,减少了显式类型注解的需要。


转载请注明出处:http://www.zyzy.cn/article/detail/4700/TypeScript