TypeScript — это статически типизированная расширенная версия JavaScript, которая позволяет разработчикам добавлять аннотации типов в свой код. Одной из мощных возможностей TypeScript является возможность определять универсальные классы, которые могут повысить возможность повторного использования кода и безопасность типов. В этой статье мы рассмотрим универсальные классы TypeScript и предоставим несколько примеров методов, которые можно использовать с ними.
- Базовый универсальный класс:
Давайте начнем с простого примера универсального класса, который представляет структуру данных стека:
class Stack<T> {
private elements: T[] = [];
push(item: T) {
this.elements.push(item);
}
pop(): T | undefined {
return this.elements.pop();
}
}
// Usage:
const numberStack = new Stack<number>();
numberStack.push(1);
numberStack.push(2);
console.log(numberStack.pop()); // Output: 2
const stringStack = new Stack<string>();
stringStack.push("Hello");
stringStack.push("World");
console.log(stringStack.pop()); // Output: "World"
- Общие методы:
Общие классы также могут иметь обобщённые методы. Вот пример универсального класса с универсальным методом, который меняет местами два элемента:
class Swapper<T> {
swap(a: T, b: T): void {
[a, b] = [b, a];
}
}
// Usage:
const swapper = new Swapper<number>();
let a = 5, b = 10;
swapper.swap(a, b);
console.log(a, b); // Output: 10, 5
- Ограничение универсальных типов.
Вы также можете ограничить параметр универсального типа определенным набором типов с помощью интерфейсов. Вот пример, демонстрирующий универсальный класс, который может принимать только объекты, реализующие интерфейсComparable:
interface Comparable {
compareTo(other: this): number;
}
class SortedList<T extends Comparable> {
private elements: T[] = [];
add(item: T) {
this.elements.push(item);
this.elements.sort((a, b) => a.compareTo(b));
}
}
// Usage:
class Person implements Comparable {
constructor(public name: string) {}
compareTo(other: Person): number {
return this.name.localeCompare(other.name);
}
}
const list = new SortedList<Person>();
list.add(new Person("John"));
list.add(new Person("Alice"));
Общие классы в TypeScript предоставляют мощный способ написания многоразового и типобезопасного кода. Используя универсальные типы и методы, вы можете создавать гибкие и эффективные структуры данных, алгоритмы и служебные классы. Используя примеры, приведенные в этой статье, вы можете начать включать универсальные классы в свои проекты TypeScript и воспользоваться преимуществами, которые они предлагают.