← Wszystkie zadaniaTypeScript · Junior
Discriminated union: pole figury
Typ Shape opisuje koło i prostokąt; pole kind mówi, która to figura. Dodaj do niego kwadrat { kind: "square"; size: number } i napisz area(shape), które zwraca pole dowolnej figury.
Przyda się, żeby TypeScript przypomniał o area, gdy kiedyś dojdzie kolejna figura: dodaj sprawdzenie wyczerpania przypadków przez never.
Ctrl+Enter uruchamia testy. Tab robi wcięcie; aby wyjść z edytora klawiaturą, naciśnij Esc, a potem Tab. Kod zapisuje się w tej przeglądarce.
Testy (6)
Testy typów sprawdza kompilator TypeScriptu w trybie strict. Expect<Equal<A, B>> przechodzi, gdy typy są dokładnie takie same, a // @ts-expect-error, gdy następna linia się nie kompiluje. Pierwsze uruchomienie pobiera kompilator, więc trwa kilka sekund.
- typy
type _ = Expect<Equal<Shape["kind"], "circle" | "rect" | "square">>;
- typy
area({ kind: "square", size: 3 });
- typy
// @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);