跳到主要内容

TypeScript 泛型类

摘要:在本教程中,你将学习如何开发 TypeScript 泛型类。

TypeScript 泛型类简介

对于一个泛型类来说,它的同类型参数列表位于类名后面的尖括号 <> 里。

class className<T>{
//...
}

TypeScript 允许你在类型参数列表中拥有多个通用类型。 例如:

class className<K,T>{
//...
}

泛型约束也适用于类中的泛型:

class className<T extends TypeA>{
//...
}

将类型参数放在类上允许你编写使用相同类型的方法和属性。

TypeScript 泛型类示例

在此示例中,我们将开发一个泛型类 Stack

堆栈是一种遵循后进先出(或 LIFO)原则的数据结构。 这意味着放入堆栈的第一个元素是从堆栈中获取的最后一个元素。

通常,堆栈具有大小。 默认情况下,它是空的。 堆栈有两个主要操作:

  • Push:将一个元素压入栈中。
  • Pop:从栈中弹出一个元素。

下面显示了一个完整的 Stack 类,称为 Stack<T>

class Stack<T> {
private elements: T[] = [];

constructor(private size: number) {
}
isEmpty(): boolean {
return this.elements.length === 0;
}
isFull(): boolean {
return this.elements.length === this.size;
}
push(element: T): void {
if (this.elements.length === this.size) {
throw new Error('The stack is overflow!');
}
this.elements.push(element);

}
pop(): T {
if (this.elements.length == 0) {
throw new Error('The stack is empty!');
}
return this.elements.pop();
}
}

以下创建了一个新的数字堆栈:

let numbers = new Stack<number>(5);

此函数返回两个数字(lowhigh)之间的随机数:

function randBetween(low: number, high: number): number {
return Math.floor(Math.random() * (high - low + 1) + low);
}

现在,你可以使用 randBetween() 函数生成随机数以推入数字堆栈:

let numbers = new Stack<number>(5);

while (!numbers.isFull()) {
let n = randBetween(1, 10);
console.log(`Push ${n} into the stack.`)
numbers.push(n);
}

输出:

Push 3 into the stack.
Push 2 into the stack.
Push 1 into the stack.
Push 8 into the stack.
Push 9 into the stack.

下面展示了如何从堆栈中弹出元素直到堆栈为空:

while (!numbers.isEmpty()) {
let n = numbers.pop();
console.log(`Pop ${n} from the stack.`);
}

输出:

Pop 9 from the stack.
Pop 8 from the stack.
Pop 1 from the stack.
Pop 2 from the stack.
Pop 3 from the stack.

同样,你可以创建字符串堆栈。 例如:

let words = 'The quick brown fox jumps over the lazy dog'.split(' ');

let wordStack = new Stack<string>(words.length);

// push words into the stack
words.forEach(word => wordStack.push(word));

// pop words from the stack
while (!wordStack.isEmpty()) {
console.log(wordStack.pop());
}

怎么运行的:

  • 首先,将句子分成单词。
  • 其次,创建一个堆栈,其大小等于 words 数组中的单词数。
  • 第三,将 words 数组的元素推入堆栈。
  • 最后,从堆栈中弹出单词,直到堆栈为空。

在本教程中,你学习了如何在 TypeScript 中开发泛型类。