TypeScript 数据类型详解

基础数据类型

TypeScript 支持 JavaScript 的所有基础数据类型,并添加了类型注解。以下是主要的基础数据类型:

1. number 类型

表示数字类型,包括整数和浮点数:

1
2
3
4
5
6
let decimal: number = 6;        // 十进制
let hex: number = 0xf00d;       // 十六进制
let binary: number = 0b1010;    // 二进制
let octal: number = 0o744;      // 八进制
let float: number = 3.14;       // 浮点数
let scientific: number = 3.14e2; // 科学计数法

2. bigint 类型

表示大整数,可以安全地存储和操作大整数:

1
2
3
4
5
6
let bigInt: bigint = 9007199254740991n;
let bigInt2: bigint = BigInt(9007199254740991);

// 注意:bigint 不能与 number 直接运算
let result: bigint = bigInt + 1n;  // 正确
let error: bigint = bigInt + 1;    // 错误

3. string 类型

表示字符串,支持单引号、双引号和模板字符串:

1
2
3
4
5
6
7
let name: string = "TypeScript";
let message: string = 'Hello World';
let template: string = `Hello ${name}`;
let multiline: string = `
  This is a
  multiline string
`;

4. boolean 类型

表示布尔值,只有 true 和 false 两个值:

1
2
let isDone: boolean = false;
let isActive: boolean = true;

5. symbol 类型

表示唯一的标识符,通常用于对象属性的键:

1
2
3
4
5
let sym1: symbol = Symbol();
let sym2: symbol = Symbol("key");  // 可选的字符串键

// 注意:每个 Symbol 都是唯一的
console.log(sym1 === sym2);  // false

6. null 和 undefined 类型

表示空值:

1
2
3
4
5
6
let u: undefined = undefined;
let n: null = null;

// 注意:null 和 undefined 是所有类型的子类型
let num: number = undefined;  // 正确
let str: string = null;      // 正确

7. void 类型

表示没有任何类型,通常用于函数返回值:

1
2
3
4
5
6
function warnUser(): void {
  console.log("This is a warning message");
}

// 注意:声明 void 类型的变量只能赋值 undefined 或 null
let unusable: void = undefined;

8. object 类型

表示非原始类型,即除 number、string、boolean、symbol、null 或 undefined 之外的类型:

1
2
3
4
5
6
let obj: object = { name: "TypeScript" };
let arr: object = [1, 2, 3];
let func: object = function() {};

// 注意:object 类型不包含原始类型
let primitive: object = 42;  // 错误

类型推断

TypeScript 可以根据上下文自动推断类型:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 类型推断为 number
let x = 3;

// 类型推断为 string
let y = "hello";

// 类型推断为 boolean
let z = true;

// 类型推断为 number[]
let numbers = [1, 2, 3];

类型注解

可以显式声明变量类型:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// 基本类型注解
let name: string = "TypeScript";
let age: number = 25;
let isStudent: boolean = true;

// 数组类型注解
let numbers: number[] = [1, 2, 3];
let strings: string[] = ["a", "b", "c"];

// 元组类型注解
let tuple: [string, number] = ["hello", 10];

// 枚举类型注解
enum Color { Red, Green, Blue }
let favoriteColor: Color = Color.Blue;

类型断言

允许你覆盖 TypeScript 的类型推断:

1
2
3
4
5
6
7
// 尖括号语法
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;

// as 语法
let someValue2: any = "this is a string";
let strLength2: number = (someValue2 as string).length;

最佳实践

  1. 优先使用类型推断

    • 让 TypeScript 自动推断类型
    • 只在必要时添加类型注解
  2. 避免使用 any

    • 优先使用具体的类型
    • 如果必须使用,添加注释说明原因
  3. 合理使用类型断言

    • 只在确信类型正确时使用
    • 优先使用 as 语法而不是尖括号
  4. 注意 null 和 undefined

    • 使用可选链操作符 ?.
    • 使用空值合并操作符 ??

总结

类型描述示例注意事项
number数字类型let num: number = 42支持整数和浮点数
bigint大整数let big: bigint = 9007199254740991n不能与 number 直接运算
string字符串let str: string = "hello"支持模板字符串
boolean布尔值let bool: boolean = true只有 true/false
symbol唯一标识符let sym: symbol = Symbol()每个值都是唯一的
null空值let n: null = null所有类型的子类型
undefined未定义let u: undefined = undefined所有类型的子类型
void无类型function f(): void {}只能赋值 undefined
object非原始类型let obj: object = {}不包含原始类型

记住:

  • 优先使用类型推断
  • 只在必要时添加类型注解
  • 避免使用 any 类型
  • 合理使用类型断言

57.12k 字
43篇文章