TypeScript 是 JavaScript 的一个超集,它通过添加静态类型检查和类型系统来增强 JavaScript 的功能和可维护性。掌握 TypeScript,特别是其复杂类型系统和高级泛型应用,可以帮助开发者更高效地编写代码,减少错误,并提高代码的可读性和可维护性。
基础类型
TypeScript 提供了一系列基础类型,这些类型是构建复杂类型的基础。以下是一些常见的基础类型:
- 布尔型(boolean):用于表示逻辑值,如
true和false。 - 数字型(number):用于表示整数和浮点数。
- 字符串型(string):用于表示文本。
- 数组型(array):用于表示一组有序元素。
- 元组型(tuple):用于表示一个已知元素数量和类型的数组。
- 枚举型(enum):用于定义一组命名的常量。
- 任意型(any):用于表示任何类型的值。
示例
let isDone: boolean = false;
let count: number = 10;
let msg: string = "Hello, TypeScript!";
let numbers: number[] = [1, 2, 3];
let x: [string, number];
x = ["hello", 10];
let colors: enum = { Red: 1, Green: 2, Blue: 3 };
let notSure: any = 4;
notSure = "maybe a string instead";
接口(Interfaces)
接口是一种用来描述对象形状的类型。在 TypeScript 中,接口可以用来定义对象的属性名和属性类型。
示例
interface Person {
name: string;
age: number;
}
let tom: Person = {
name: 'Tom',
age: 25
};
高级类型
TypeScript 的高级类型包括泛型、联合类型、交叉类型和映射类型等。
泛型(Generics)
泛型允许在定义函数、接口和类时,不指定具体的类型,而是使用类型变量来代替。这样可以增强代码的复用性和灵活性。
示例
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("your string"); // 类型为 string
联合类型(Union Types)
联合类型允许表示一个变量可以是多种类型中的一种。
示例
function combine(a: string, b: number): string | number {
return a + b;
}
let result = combine("Hello", 10); // result 类型为 string | number
交叉类型(Intersection Types)
交叉类型允许表示一个变量可以是多个类型的组合。
示例
interface Admin {
name: string;
privileges: string[];
}
interface User {
name: string;
email: string;
}
type AdminUser = Admin & User;
let user: AdminUser = {
name: "Alice",
email: "alice@xyz.com",
privileges: ["read", "write"]
};
映射类型(Mapped Types)
映射类型允许创建一个新的类型,它是通过将原类型的每个属性映射到另一个类型来生成的。
示例
type Keys = keyof Person; // 'name' | 'age' | 'gender'
type RequiredKeys = Required<Person>; // { name: string; age: number; gender: string; }
type PartialKeys = Partial<Person>; // { name?: string; age?: number; gender?: string; }
type PickKeys = Pick<Person, 'name' | 'age'>; // { name: string; age: number; }
总结
学会 TypeScript 的复杂类型系统和高级泛型应用,可以让你的代码更加健壮、可维护,并且能够更好地处理复杂的数据结构。通过这些高级特性,你可以写出更加优雅和高效的 TypeScript 代码。
