← Alle AufgabenTypeScript · Junior

Discriminated Union: Fläche einer Form

Der Typ Shape beschreibt einen Kreis und ein Rechteck; das Feld kind sagt, welches es ist. Füge ein Quadrat { kind: "square"; size: number } hinzu und schreib area(shape), das die Fläche jeder Form liefert.

Es hilft, wenn TypeScript dich an area erinnert, wenn eines Tages eine weitere Form dazukommt: ergänze eine Vollständigkeitsprüfung mit never.

Tests (6)

Typtests prüft der TypeScript-Compiler im strict-Modus. Expect<Equal<A, B>> besteht, wenn die Typen exakt gleich sind, und // @ts-expect-error, wenn die nächste Zeile nicht kompiliert. Der erste Start lädt den Compiler und dauert daher ein paar Sekunden.

  1. Typen
    type _ = Expect<Equal<Shape["kind"], "circle" | "rect" | "square">>;
  2. Typen
    area({ kind: "square", size: 3 });
  3. Typen
    // @ts-expect-error - a circle has a radius, not a width
    area({ kind: "circle", width: 2 });
  4. expect(Math.abs(area({ kind: 'circle', radius: 2 }) - Math.PI * 4) < 1e-9).toBe(true);
  5. expect(area({ kind: 'rect', width: 3, height: 4 })).toBe(12);
  6. expect(area({ kind: 'square', size: 5 })).toBe(25);