TypeScript 是 JavaScript 的一个超集,它通过引入类型系统为 JavaScript 提供了类型检查、接口定义、模块化等功能。掌握 TypeScript 的类型系统对于构建健壮的代码架构至关重要。以下是一些关键点,帮助你深入了解 TypeScript 类型系统,并构建更加稳定的代码架构。
一、类型系统的基本概念
1. 基本类型
TypeScript 支持多种基本数据类型,如:
- 布尔值(boolean)
- 数字(number)
- 字符串(string)
- null 和 undefined
- 枚举(enum)
let isDone: boolean = false;
let count: number = 10;
let name: string = "张三";
let undefinedValue: undefined = undefined;
let nullValue: null = null;
enum Color { Red, Green, Blue };
let c: Color = Color.Green;
2. 引用类型
TypeScript 支持引用类型,如数组、对象、函数等。
- 数组
let list: number[] = [1, 2, 3];
let list2: Array<number> = [1, 2, 3];
- 对象
interface Person {
name: string;
age: number;
}
let person: Person = {
name: "李四",
age: 20
};
- 函数
function add(a: number, b: number): number {
return a + b;
}
二、高级类型
1. 泛型
泛型允许你编写可重用的组件,并在使用时指定具体的类型。
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("我的 TypeScript 类型系统");
2. 高级类型
TypeScript 提供了一些高级类型,如联合类型、交叉类型、索引签名等。
- 联合类型
let result: string | number = 123;
result = "hello";
- 交叉类型
interface A {
a: string;
}
interface B {
b: number;
}
let c: A & B = { a: "string", b: 123 };
- 索引签名
interface StringArray {
[index: number]: string;
}
let myArray: StringArray = ["Alice", "Bob", "Charlie"];
三、类型守卫
类型守卫是一种技术,用于在运行时检查变量的类型。
1. typeof 类型守卫
function isString(value: any): value is string {
return typeof value === "string";
}
const value = "123";
if (isString(value)) {
console.log(value.toUpperCase()); // 正确:value 被断言为 string
}
2. 程序员类型守卫
function isString(value: any): value is string {
return typeof value === "string";
}
function example(value: any) {
if (typeof value === "string") {
// value 现在类型为 string
console.log(value.toUpperCase());
}
}
四、模块化
TypeScript 支持模块化,这使得代码更加模块化、可重用。
// 文件:module.ts
export function add(a: number, b: number): number {
return a + b;
}
// 文件:main.ts
import { add } from "./module";
const result = add(1, 2);
console.log(result); // 3
五、总结
掌握 TypeScript 类型系统对于构建健壮的代码架构至关重要。通过了解基本类型、高级类型、类型守卫和模块化,你可以更好地利用 TypeScript 的优势,编写更加稳定、可维护的代码。希望这篇文章能帮助你更好地掌握 TypeScript 类型系统,并在实际项目中发挥其价值。
