TypeScript 是 JavaScript 的一个超集,它通过添加静态类型检查和类型系统来增强 JavaScript 的功能和可维护性。掌握 TypeScript,特别是其复杂类型系统和高级泛型应用,可以帮助开发者更高效地编写代码,减少错误,并提高代码的可读性和可维护性。

基础类型

TypeScript 提供了一系列基础类型,这些类型是构建复杂类型的基础。以下是一些常见的基础类型:

  • 布尔型(boolean):用于表示逻辑值,如 truefalse
  • 数字型(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 代码。