GenericsLesson 4.3
Generic interfaces and generic classes in TypeScript
generic interface declaration, generic class, generic stack implementation, multiple type parameters, default type parameters
Generic interfaces
interface Repository {
findById(id: number): T | null;
findAll(): T[];
save(entity: T): void;
delete(id: number): void;
}Any class implementing this interface must specify T:
class UserRepo implements Repository {
private users: User[] = [];
findById(id: number) { return this.users.find(u => u.id === id) ?? null; }
findAll() { return this.users; }
save(user: User) { this.users.push(user); }
delete(id: number) { this.users = this.users.filter(u => u.id !== id); }
}Generic class: Stack
class Stack {
private items: T[] = [];
push(item: T): void { this.items.push(item); }
pop(): T | undefined { return this.items.pop(); }
peek(): T | undefined { return this.items[this.items.length - 1]; }
get size(): number { return this.items.length; }
}
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.pop(); // 2