在编程的世界里,泛型提供了一种表达类型为参数的方式,这些参数的实际类型在调用或实例化时指定。TypeScript 允许在许多地方使用泛型。本教程将展示如何在类中使用泛型类型参数。
泛型基础
泛型是编程中的一个强大工具,它允许我们创建可重用的组件,这些组件可以操作多种类型的数据,而不仅仅是一种类型。
示例一:单类型参数的泛型类
以下是一个使用泛型类型参数 T
的 List
类的示例。这个类可以存储任何类型的元素,并提供了添加和删除元素的方法。
class List<T> {
private data: T[];
constructor(...elements: T[]) {
this.data = elements;
}
add(t: T) {
this.data.push(t);
}
remove(t: T) {
let index = this.data.indexOf(t);
if (index > -1) {
this.data.splice(index, 1);
}
}
asArray(): T[] {
return this.data;
}
}
使用这个类,我们可以创建一个整数列表和一个字符串列表,它们分别使用不同的类型参数进行实例化。
let numbers = new List<number>(1, 3, 6, 7);
numbers.add(11);
numbers.remove(3);
let numArray = numbers.asArray();
console.log(numArray); // 输出:[ 1, 6, 7, 11 ]
let fruits = new List<string>("apple", "banana", "orange");
fruits.add("mango");
fruits.remove("apple");
let fruitArray = fruits.asArray();
console.log(fruitArray); // 输出:[ 'banana', 'orange', 'mango' ]
示例二:多类型参数的泛型类
TypeScript 还支持使用多个泛型类型参数。以下是一个 Pair
类的示例,它接受两个泛型类型参数 F
和 S
。
class Pair<F, S> {
private _first: F;
private _second: S;
constructor(first: F, second: S) {
this._first = first;
this._second = second;
}
get first(): F {
return this._first;
}
get second(): S {
return this._second;
}
}
这个类可以用来创建包含两种不同类型元素的对。
let pair = new Pair<number, boolean>(10, true);
console.log(pair.first); // 输出:10
console.log(pair.second); // 输出:true
console.log(pair); // 输出:Pair { _first: 10, _second: true }
let pair2 = new Pair<string, number>("1K", 1000);
console.log(pair2.first); // 输出:1K
console.log(pair2.second); // 输出:1000
console.log(pair2); // 输出:Pair { _first: '1K', _second: 1000 }
项目示例
本教程使用的依赖和技术包括:
- TypeScript 3.1.1
通过上述示例,我们可以看到泛型如何提高代码的灵活性和重用性。无论是处理单一类型还是多种类型,泛型都是TypeScript中不可或缺的一部分。