TypeScript 是一种由 Microsoft 开发的开源编程语言,它是 JavaScript 的一个超集,添加了可选的类型系统。通过使用 TypeScript,开发者可以更早地发现代码中的错误,提高代码的可维护性和安全性。本文将带您从基础类型到泛型,一步步掌握 TypeScript 的复杂类型系统。

一、TypeScript 简介

TypeScript 是一个静态类型语言,它提供了类型检查、接口、模块、类等特性。这些特性使得 TypeScript 在大型项目开发中具有更高的效率和安全性。TypeScript 的编译结果通常是 JavaScript,因此,它可以在任何支持 JavaScript 的环境中运行。

二、基础类型

TypeScript 支持多种基础类型,包括:

  • 数字(Number):表示整数和浮点数。
  • 字符串(String):表示文本。
  • 布尔值(Boolean):表示真或假。
  • 数组(Array):表示一系列元素。
  • 元组(Tuple):表示一个已知元素数量和类型的数组。
  • 枚举(Enum):用于定义一组命名的常量。
  • 任意类型(Any):表示任何类型。

以下是一个使用基础类型的示例:

let age: number = 18;
let name: string = "张三";
let isStudent: boolean = true;
let hobbies: Array<string> = ["篮球", "足球", "编程"];
let coordinates: [number, number] = [100, 200];
let color: "红色" | "蓝色" | "绿色" = "蓝色";
let anyType: any = "任意类型";

三、接口

接口是一种类型声明,用于描述对象的形状。它定义了对象必须具有的属性和类型。

interface Person {
  name: string;
  age: number;
}

function introduce(person: Person): void {
  console.log(`我的名字是 ${person.name},今年 ${person.age} 岁。`);
}

let tom: Person = { name: "汤姆", age: 20 };
introduce(tom);

四、类

类是 TypeScript 中的核心概念之一,它用于定义具有属性和方法的对象。

class Animal {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  makeSound(): void {
    console.log(`${this.name} 呜呜叫。`);
  }
}

let dog: Animal = new Animal("小狗", 3);
dog.makeSound();

五、泛型

泛型是一种在编译时提供类型参数的机制。它允许您创建可重用的组件,同时保持类型安全。

function identity<T>(arg: T): T {
  return arg;
}

let result = identity<string>("我是泛型函数的结果");

六、高级类型

TypeScript 提供了一些高级类型,如映射类型、条件类型、联合类型、交叉类型等。

// 映射类型
interface Person {
  name: string;
  age: number;
}

type PersonPartial = Partial<Person>;
type PersonReadonly = Readonly<Person>;

// 条件类型
type T1 = 'a' | 'b' | 'c';
type T2 = T1 extends 'a' ? 1 : 2;

// 联合类型
type T3 = 'a' | 'b';

// 交叉类型
type T4 = 'a' & 'b';

七、总结

通过学习 TypeScript 的基础类型、接口、类、泛型和高级类型,您可以轻松驾驭复杂类型系统,提高代码的安全性和可维护性。掌握 TypeScript,让您的 JavaScript 开发更上一层楼!