主题
类型系统基础
TypeScript 的核心优势之一就是其强大的类型系统。本章节将介绍最常用的基础类型以及它们的使用方式。
原始类型
TypeScript 支持 JavaScript 中的所有原始类型:
ts
let num: number = 42;
let str: string = "Hello, TypeScript!";
let isActive: boolean = true;
let u: undefined = undefined;
let n: null = null;
let sym: symbol = Symbol("unique");
注意:null
和 undefined
默认在非严格模式下是所有类型的子类型。
数组与元组
数组(Array)
定义一个元素类型为 number
的数组:
ts
let numbers: number[] = [1, 2, 3];
或使用泛型写法:
ts
let strings: Array<string> = ["a", "b", "c"];
元组(Tuple)
元组用于定义已知长度和类型顺序的数组:
ts
let person: [string, number] = ["Alice", 30];
枚举(Enum)
枚举用于定义一组命名常量:
ts
enum Direction {
Up,
Down,
Left,
Right
}
let dir: Direction = Direction.Up;
也可以使用字符串枚举:
ts
enum Status {
Success = "success",
Failure = "failure"
}
任意类型与类型推断
any
any
表示放弃类型检查,等同于 JavaScript 的动态类型:
ts
let value: any = 123;
value = "string";
value = true;
不推荐在实际项目中过多使用。
unknown
unknown
表示类型未知,但更安全(使用前必须先做类型判断):
ts
let input: unknown = "hello";
if (typeof input === "string") {
console.log(input.toUpperCase());
}
类型推断
TypeScript 会自动根据初始值推断变量类型:
ts
let count = 100; // 推断为 number
类型别名与交叉类型
类型别名(type)
可以使用 type
为复杂类型取别名,简化书写:
ts
type Point = {
x: number;
y: number;
};
let p: Point = { x: 10, y: 20 };
交叉类型(&)
交叉类型将多个类型合并为一个:
ts
type A = { name: string };
type B = { age: number };
type C = A & B;
let person: C = { name: "Tom", age: 25 };