typestar

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

  1. abstract methods must be implemented by subclasses.
  2. protected members are visible to subclasses only.
  3. A getter exposes derived state read-only.

Keywords and builtins used here

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.

Type this snippet

Step 1 of 4 in Classes, step 1 of 19 in Classes & patterns.

Next →