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.
Strg+Enter führt die Tests aus. Tab rückt ein; um den Editor per Tastatur zu verlassen, drücke Esc und dann Tab. Der Code wird in diesem Browser gespeichert.
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.
- Typen
type _ = Expect<Equal<Shape["kind"], "circle" | "rect" | "square">>;
- Typen
area({ kind: "square", size: 3 });
- Typen
// @ts-expect-error - a circle has a radius, not a width area({ kind: "circle", width: 2 });
expect(Math.abs(area({ kind: 'circle', radius: 2 }) - Math.PI * 4) < 1e-9).toBe(true);
expect(area({ kind: 'rect', width: 3, height: 4 })).toBe(12);
expect(area({ kind: 'square', size: 5 })).toBe(25);