TypeScript - 类型
TypeScript - 类型
Section titled “TypeScript - 类型”TypeScript 的核心优势在于其静态类型系统 (static type system)。该系统允许你显式定义变量、函数参数和返回值的类型。然后,TypeScript 编译器会利用这些类型注解在代码运行之前检查错误,捕获潜在问题,例如将字符串赋值给数字变量或调用对象上不存在的方法。
使用类型提高了代码的可靠性,使得重构更安全,增强了代码的可读性和文档性,并为代码编辑器提供了强大的工具支持,如代码补全和智能错误报告。
基本原始类型
Section titled “基本原始类型”这些是数据的基础构建块:
| 类型 | 关键字 | 描述 | 示例 |
|---|---|---|---|
| Number | number | 表示整数和浮点数(双精度 64 位)。 | let age: number = 30; let price: number = 99.95; |
| String | string | 表示字符序列(文本)。用单引号 (')、双引号 (") 或反引号 (`) 包围。 | let name: string = "Alice"; let message: string = Hello, ${name}; |
| Boolean | boolean | 表示逻辑值:true 或 false。 | let isActive: boolean = true; let hasFinished: boolean = false; |
| Null | null | 表示刻意没有对象值。只有一个值:null。 | let data: string | null = null; (常用于联合类型) |
| Undefined | undefined | 表示未初始化变量自动获得的值。只有一个值:undefined。 | let notAssigned: number | undefined; (常用于隐式或联合类型) |
| Symbol | symbol | (ES6+) 表示独一无二、不可变的标识符,常用于对象属性的键。 | const id: symbol = Symbol('uniqueId'); |
| BigInt | bigint | (ES2020+) 表示大于 number 类型可表示的最大安全整数的整型数字。 | const largeNumber: bigint = 9007199254740991n; (注意 n 后缀) |
关于 null 和 undefined 的注意事项: 默认情况下,null 和 undefined 是所有其他类型的子类型 (subtype),这意味着你可以将它们赋值给例如 string 类型的变量。但是,启用 strictNullChecks 编译器选项(强烈推荐)会将 null 和 undefined 视为不同的类型,迫使你显式处理潜在的 null/undefined 值,通常使用联合类型(例如 string | null)。
| 类型 | 关键字 | 描述 |
|---|---|---|
| Any | any | 动态类型的逃生舱。使用 any 会使该变量退出类型检查。应尽量避免使用 any,因为它违背了 TypeScript 的目的。优先使用更具体的类型或 unknown。 |
| Unknown | unknown | any 的类型安全对应物。表示类型未知的值。在对 unknown 值执行操作之前,必须先进行类型检查(窄化)或使用类型断言。 |
| Void | void | 主要用作不返回值的函数的返回类型。 |
| Never | never | 表示永远不会发生的值的类型。用于总是抛出错误或从不返回的函数(例如,无限循环)。也出现在类型窄化中,当没有剩余的可能性时。 |
| Object | object | 表示任何非原始类型(即,不是 number、string、boolean、symbol、null、undefined 或 bigint 的任何事物)。通常不如使用接口或类型别名定义的特定对象类型有用。 |
对象类型和自定义类型
Section titled “对象类型和自定义类型”除了原始类型,TypeScript 还允许你定义复杂的结构:
- 数组 (Arrays): 同一类型值的有序列表。语法:
type[]或Array<type>。(例如,number[]、Array<string>) - 元组 (Tuples): 大小固定的数组,其中每个元素的类型是已知的。语法:
[type1, type2, ...]。(例如,[string, number]) - 枚举 (Enums): 一种定义一组命名常量的方式。语法:
enum Color { Red, Green, Blue }。 - 接口 (Interfaces): 定义对象的形状或契约。语法:
interface Person { name: string; age: number; }。 - 类型别名 (Type Aliases): 为类型(原始类型、联合类型、交叉类型、对象类型等)创建自定义名称。语法:
type UserID = string | number;。 - 类 (Classes): 带有属性和方法的创建对象的蓝图。
- 函数 (Functions): 根据参数和返回值有自己的类型。
这些更复杂的类型将在各自的章节中详细介绍。理解基本类型是利用 TypeScript 强大类型系统的第一步。