Abstract classes and generics in TypeScript
A generic base class with an abstract contract.
abstract class Repository<T> {
protected items = new Map<number, T>();
abstract validate(item: T): boolean;
save(id: number, item: T): void {
if (this.validate(item)) this.items.set(id, item);
}
get size(): number {
return this.items.size;
}
}
class UserRepo extends Repository<{ name: string }> {
validate(item: { name: string }): boolean {
return item.name.length > 0;
}
}
How it works
abstractmethods must be implemented by subclasses.protectedmembers are visible to subclasses only.- A getter exposes derived state read-only.
Keywords and builtins used here
MapTabstractbooleanclassextendsifnumberprotectedreturnstringthis
The run, in numbers
- Lines
- 19
- Characters to type
- 378
- Tokens
- 116
- Three-star pace
- 100 tpm
At the three-star pace of 100 tokens a minute, this run takes about 70 seconds.
Step 1 of 4 in Classes, step 1 of 19 in Classes & patterns.