TypeScript 中的基本数据类型有哪些?
TypeScript 中的数据类型可以分为三类:JavaScript 原生基础类型、对象/集合类型以及 TypeScript 特有的特殊类型。
以下是详细的分类和说明:
1. JavaScript 原生基础类型 (Primitives)
TypeScript 继承了 JavaScript 的所有原始数据类型。
- Boolean (布尔值)typescript
let isDone: boolean = false; - Number (数字)
支持整数、浮点数,以及二进制、八进制、十六进制字面量。typescriptlet decLiteral: number = 6; let hexLiteral: number = 0xf00d; - String (字符串)
可以使用单引号、双引号或模板字符串(反引号)。typescriptlet name: string = "bob"; let sentence: string = `Hello, my name is ${name}.`; - Null 和 Undefined
默认情况下,它们是所有类型的子类型(可以赋值给 number 等)。但在strictNullChecks: true(推荐配置)下,它们只能赋值给any、unknown或它们各自的类型(void可以接受undefined)。typescriptlet u: undefined = undefined; let n: null = null; - Symbol (符号)
ES6 引入,表示独一无二的值。typescriptlet sym1 = Symbol("key"); let sym2 = Symbol("key"); // sym1 === sym2 为 false - BigInt (大整数)
ES2020 引入,用于表示比2^53 - 1更大的整数。typescriptlet big: bigint = 100n;
2. 集合与引用类型
- Array (数组)
有两种写法:typescriptlet list1: number[] = [1, 2, 3]; // 推荐写法 let list2: Array<number> = [1, 2, 3]; // 泛型写法 - Tuple (元组)
TypeScript 特有概念。表示一个已知元素数量和类型的数组,各元素的类型不必相同。typescriptlet x: [string, number]; x = ["hello", 10]; // OK // x = [10, "hello"]; // Error - Object (对象)
表示非原始类型(即除 number, string, boolean, symbol, null, undefined 之外的类型)。注意:通常在定义对象形状时,会使用接口(Interface)或类型别名(Type Alias),而不是直接用typescriptlet obj: object = { prop: 0 };object。
3. TypeScript 特有的特殊类型
- Enum (枚举)
用于定义一组命名常量,使代码更具可读性。typescriptenum Color { Red, Green, Blue } let c: Color = Color.Green; - Any (任意类型)
逃生舱。允许赋值为任意类型,并且可以访问任意属性或方法。会跳过类型检查,应尽量少用。typescriptlet notSure: any = 4; notSure = "maybe a string instead"; notSure.toFixed(); // 编译器不会报错,即使运行时可能出错 - Unknown (未知类型)
安全的 Any。可以赋值为任意类型,但在进行类型断言或类型收窄之前,不允许对该变量进行任何操作(如访问属性、函数调用)。typescriptlet value: unknown = 4; // value.toFixed(); // Error: Object is of type 'unknown'. if (typeof value === "number") { value.toFixed(); // OK } - Void (空)
通常用于表示函数没有返回值。typescriptfunction warnUser(): void { console.log("This is my warning message"); } - Never (永不存在的值)
表示那些永远不存在的值的类型。常用于抛出错误的函数或无限循环的函数返回值。typescriptfunction error(message: string): never { throw new Error(message); }
总结图表
| 类型 | 描述 | 示例 |
|---|---|---|
| boolean | 逻辑真/假 | true, false |
| number | 所有数字 | 123, 1.5, 0xf00d |
| string | 文本 | "Hello", 'Hi' |
| array | 数组 | number[], Array<string> |
| tuple | 固定长度和类型的数组 | [string, number] |
| enum | 命名常量集合 | enum Color {Red, Blue} |
| any | 任意类型(放弃检查) | 任何值 |
| unknown | 未知类型(安全检查) | 任何值(需断言后使用) |
| void | 无返回值 | 函数返回类型 |
| never | 永远不会有值 | 抛错函数, 死循环 |
| object | 非原始类型 | {} |