返回

TypeScript 文档学习:常见类型(下)

前端

类型在 TypeScript 中无处不在,不仅出现在类型注解 (type annotations)中,还出现在其他很多地方。我们不仅要学习类型本身,也要学习在什么地方使用这些类型产生新的结构。

1. 联合类型

联合类型表示一个值可以是多种类型之一。联合类型使用 | 符号来分隔不同的类型。例如:

let x: string | number;
x = "Hello";
x = 123;

在这个例子中,x 可以是字符串类型或数字类型。

2. 交叉类型

交叉类型表示一个值同时具有多种类型的特征。交叉类型使用 & 符号来连接不同的类型。例如:

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

type Employee = Person & {
  salary: number;
};

let employee: Employee = {
  name: "John",
  age: 30,
  salary: 100000
};

在这个例子中,Employee 类型是 Person 类型和 { salary: number } 类型的交叉类型。Employee 类型的值必须同时具有 Person 类型的特征和 { salary: number } 类型的特征。

3. 索引类型

索引类型表示一个对象或数组的元素的类型。索引类型使用 [] 符号来表示。例如:

let ages: { [name: string]: number } = {
  "John": 30,
  "Mary": 25
};

在这个例子中,ages 类型的键是字符串类型,值是数字类型。

4. 条件类型

条件类型表示一个值的类型取决于另一个值的类型。条件类型使用 extends 来表示。例如:

type IsString<T> = T extends string ? true : false;

let x: IsString<"Hello"> = true;
let y: IsString<123> = false;

在这个例子中,IsString 类型是一个条件类型,它表示一个值的类型是字符串类型,则返回 true,否则返回 false

5. 元组

元组表示一个固定长度和类型的元素列表。元组使用 [] 符号来表示。例如:

let tuple: [string, number] = ["Hello", 123];

在这个例子中,tuple 类型的第一个元素是字符串类型,第二个元素是数字类型。

6. 枚举

枚举表示一组具有相同类型的常量。枚举使用 enum 关键字来表示。例如:

enum Colors {
  Red,
  Green,
  Blue
}

let color: Colors = Colors.Red;

在这个例子中,Colors 枚举是一个常量集合,它包含三个成员:RedGreenBlue

7. 类型别名

类型别名表示一个新的类型,它与另一个类型具有相同的特征。类型别名使用 type 关键字来表示。例如:

type MyString = string;

let x: MyString = "Hello";

在这个例子中,MyString 类型是一个类型别名,它与 string 类型具有相同的特征。

8. 命名空间

命名空间表示一个包含类型、函数和变量的独立作用域。命名空间使用 namespace 关键字来表示。例如:

namespace MyNamespace {
  export type MyType = string;

  export function myFunction(): void {
    console.log("Hello");
  }

  export let myVariable = "Hello";
}

let x: MyNamespace.MyType = "Hello";
MyNamespace.myFunction();
console.log(MyNamespace.myVariable);

在这个例子中,MyNamespace 命名空间是一个独立的作用域,它包含 MyType 类型、myFunction 函数和 myVariable 变量。

9. 总结

本文介绍了 TypeScript 中常见的类型,包括联合类型、交叉类型、索引类型、条件类型、元组、枚举、类型别名和命名空间。通过本文,您将深入了解 TypeScript 的类型系统,并能够更加熟练地使用 TypeScript 进行开发。