返回

TypeScript学习笔记第五章高级类型(上)

前端

在之前的文章中,我们学习了TypeScript的基本数据类型和一些常用的类型注解。在本章中,我们将学习TypeScript的高级类型,包括联合类型、交叉类型、泛型和枚举类型。这些类型可以帮助我们创建更加灵活和强大的代码。

联合类型

联合类型允许一个变量可以存储多种不同类型的值。例如,我们可以定义一个变量来存储数字或字符串:

let myVariable: number | string;
myVariable = 10;
myVariable = "Hello";

我们还可以使用联合类型来定义函数的参数类型。例如,我们可以定义一个函数来接受数字或字符串作为参数:

function myFunction(x: number | string) {
  if (typeof x === "number") {
    // Do something with the number
  } else if (typeof x === "string") {
    // Do something with the string
  }
}

交叉类型

交叉类型允许我们组合多个类型来创建一个新的类型。例如,我们可以定义一个类型来表示具有姓名和年龄的人:

type Person = {
  name: string;
  age: number;
};

我们还可以使用交叉类型来定义函数的返回类型。例如,我们可以定义一个函数来返回一个包含姓名和年龄的元组:

function getPerson(): [string, number] {
  return ["Alice", 20];
}

泛型

泛型允许我们创建可重用的组件,这些组件可以处理不同类型的数据。例如,我们可以定义一个泛型函数来对数组进行排序:

function sortArray<T>(array: T[]): T[] {
  return array.sort();
}

这个函数可以用来对数组中的任何类型的数据进行排序。例如,我们可以使用它来对数组中的数字进行排序:

const numbers = [1, 2, 3, 4, 5];
const sortedNumbers = sortArray(numbers);

或者,我们可以使用它来对数组中的字符串进行排序:

const strings = ["Alice", "Bob", "Charlie"];
const sortedStrings = sortArray(strings);

枚举类型

枚举类型允许我们定义一组命名常量。例如,我们可以定义一个枚举类型来表示一周中的天数:

enum DaysOfWeek {
  Sunday,
  Monday,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday,
}

我们可以使用枚举类型来定义变量:

let today: DaysOfWeek = DaysOfWeek.Friday;

我们还可以使用枚举类型来定义函数的参数类型:

function isWeekend(day: DaysOfWeek): boolean {
  return day === DaysOfWeek.Saturday || day === DaysOfWeek.Sunday;
}

小结

联合类型、交叉类型、泛型和枚举类型都是TypeScript的高级类型。这些类型可以帮助我们创建更加灵活和强大的代码。

在下一篇文章中,我们将继续学习TypeScript的高级类型,包括类型别名、模块和命名空间。