← Усі задачіTypeScript · Junior
Discriminated union: площа фігури
Тип Shape описує коло і прямокутник; поле kind показує, яка це фігура. Додайте до нього квадрат { kind: "square"; size: number } і напишіть area(shape), що повертає площу будь-якої фігури.
Корисно, щоб TypeScript нагадав про area, якщо колись з'явиться ще одна фігура: зробіть перевірку на вичерпність через never.
Ctrl+Enter - запустити тести. Tab - відступ; щоб вийти з редактора клавіатурою, натисніть Esc, а потім Tab. Код зберігається в цьому браузері.
Тести (6)
Тести типів перевіряє компілятор TypeScript у режимі strict. Expect<Equal<A, B>> проходить, коли типи збігаються точно, а // @ts-expect-error - коли наступний рядок не компілюється. Перший запуск завантажує компілятор, тож триває кілька секунд.
- типи
type _ = Expect<Equal<Shape["kind"], "circle" | "rect" | "square">>;
- типи
area({ kind: "square", size: 3 });
- типи
// @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);