返回
TypeScript 入门宝典:深入浅出掌握泛型
前端
2023-10-23 13:20:21
泛型初探
泛型本质上是一种参数化类型,它允许你在创建函数、类或接口时使用类型变量。这种灵活性使得代码更加简洁、可重用性更高,并能确保类型安全。
类型变量
类型变量就像是占位符,它们在代码中用尖括号 <> 表示。在使用泛型时,你可以为类型变量指定一个名称,例如 T、K、V 等。当使用泛型函数或类时,你可以在调用或实例化时传入具体的数据类型来替换类型变量。
泛型函数
泛型函数允许你创建可重用的函数,而无需为每种数据类型编写单独的函数。以下是一个简单的泛型函数示例:
function identity<T>(value: T): T {
return value;
}
这个函数接收一个类型为 T 的参数,并返回相同类型的值。你可以用任何数据类型调用这个函数,例如:
const num = identity(10); // num 的类型为 number
const str = identity("Hello"); // str 的类型为 string
泛型类
泛型类允许你创建可重用的类,而无需为每种数据类型编写单独的类。以下是一个简单的泛型类示例:
class Stack<T> {
private data: T[] = [];
push(item: T) {
this.data.push(item);
}
pop(): T | undefined {
return this.data.pop();
}
}
这个类实现了栈的数据结构,它可以存储任何类型的数据。你可以用任何数据类型实例化这个类,例如:
const numStack = new Stack<number>();
const strStack = new Stack<string>();
泛型约束
有时,你可能需要对泛型类型施加约束,以确保它们满足某些条件。你可以使用 extends 来指定类型变量的约束。例如,以下泛型函数要求其参数必须是 Comparable 接口的实现:
interface Comparable<T> {
compareTo(other: T): number;
}
function max<T extends Comparable<T>>(a: T, b: T): T {
if (a.compareTo(b) > 0) {
return a;
} else {
return b;
}
}
泛型的优势
泛型为 TypeScript 带来了许多优势,包括:
- 代码重用:泛型允许你创建可重用的组件,而无需为每种数据类型编写单独的代码。
- 类型安全:泛型有助于确保类型安全,防止类型不匹配导致的错误。
- 代码可读性:泛型可以使你的代码更具可读性和可维护性,尤其是在处理复杂的数据结构时。
结语
泛型是 TypeScript 中一项强大的特性,它可以极大地提高代码的可重用性、类型安全性和可读性。通过本指南,你已经对泛型有了基本的了解,可以开始在自己的项目中使用它。