返回

TypeScript 类型进阶之旅:深入理解高级类型

前端







## 什么是 TypeScript 中的高级类型?

除了 string、number、boolean 这种基础类型外,在 typescript 类型声明中还存在一些高级的类型应用。这些高级类型,是typescript为了保证语言的灵活性,所使的一些类型扩展。高级类型在平时开发中使用还是比较频繁的,尤其是泛型、类型断言、类型保护等,理解并掌握好它们,对于实际开发帮助还是很大的。

## TypeScript 高级类型的种类

TypeScript 高级类型种类繁多,下面我们将逐一进行介绍。

### 1. 接口

接口(Interface)是 TypeScript 中用于对象的形状的一种类型。接口可以定义属性、方法和事件。接口不能被实例化,只能被其他类型实现。

接口的定义方式如下:

interface InterfaceName {
// 属性定义
propertyName: propertyType;

// 方法定义
methodName(parameter1: parameterType1, parameter2: parameterType2): returnType;

// 事件定义
eventName: eventType;
}


例如,我们可以定义一个人的接口如下:

interface Person {
name: string;
age: number;
gender: "male" | "female";
}


这个接口定义了一个名为 Person 的接口,它包含三个属性:name、age 和 gender。name 属性的类型为 string,age 属性的类型为 number,gender 属性的类型为 "male""female"### 2. 泛型

泛型(Generics)是 TypeScript 中用于创建可重用组件的一种机制。泛型允许您创建可以与任何类型一起使用的数据结构和算法。

泛型的定义方式如下:

function functionName(parameter: T): T {
// 函数体
}


例如,我们可以定义一个泛型函数来交换两个变量的值如下:

function swap(x: T, y: T): void {
let temp = x;
x = y;
y = temp;
}


这个函数可以交换任何类型的值。例如,我们可以使用它来交换两个字符串:

swap("Hello", "World");


或者两个数字:

swap(1, 2);


### 3. 类型推断

类型推断(Type Inference)是 TypeScript 中根据变量的值自动推断其类型的一种机制。类型推断可以使您的代码更加简洁和易读。

例如,我们可以使用类型推断来定义一个变量如下:

const x = "Hello";


TypeScript 会自动将 x 的类型推断为 string。

### 4. 类型别名

类型别名(Type Aliases)是 TypeScript 中用于创建新类型的别名的一种机制。类型别名可以使您的代码更加简洁和易读。

例如,我们可以使用类型别名来定义一个名为 Person 的类型如下:

type Person = {
name: string;
age: number;
gender: "male" | "female";
};


现在,我们可以使用 Person 类型来定义变量如下:

const person: Person = {
name: "John",
age: 30,
gender: "male",
};


### 5. 类型联合

类型联合(Union Types)是 TypeScript 中用于表示一个变量可以具有多个类型的一种机制。类型联合可以使您的代码更加灵活和健壮。

例如,我们可以使用类型联合来定义一个变量,它可以是字符串或数字如下:

let x: string | number;

x = "Hello";
x = 123;


### 6. 类型交叉

类型交叉(Intersection Types)是 TypeScript 中用于表示一个变量可以具有多个类型的一种机制。类型交叉可以使您的代码更加灵活和健壮。

例如,我们可以使用类型交叉来定义一个变量,它可以是字符串和数字如下:

let x: string & number;

// 报错,string 和 number 没有公共类型


### 7. 类型保护

类型保护(Type Guards)是 TypeScript 中用于检查一个变量是否具有特定类型的一种机制。类型保护可以使您的代码更加安全和健壮。

例如,我们可以使用类型保护来检查一个变量是否