基础数据类型
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;
|
最佳实践
优先使用类型推断
- 让 TypeScript 自动推断类型
- 只在必要时添加类型注解
避免使用 any
合理使用类型断言
- 只在确信类型正确时使用
- 优先使用 as 语法而不是尖括号
注意 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 类型
- 合理使用类型断言