> Что может быть неправильно в решении функции для вычисления площади фигур с использованием типов и интерфейсов TypeScript (TypeScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Точка
Стек: TypeScript
> Пример ответа
Основная проблема в таких решениях - нарушение принципа открытости/закрытости (OCP) и избыточная связанность через проверку типа. Например, если функция вычисления площади принимает Shape и внутри делает switch по shape.kind, то при добавлении новой фигуры (например, треугольника) придётся менять саму функцию, а не расширять систему. Это ведёт к ошибкам и усложнению поддержки.
Правильный подход - использовать полиморфизм через интерфейс: каждая фигура реализует метод area(). Тогда функция просто вызывает shape.area(), не зная деталей. Типичные ошибки: забыть сделать поле kind дискриминирующим (например, не использовать type с литеральным типом), неправильно задать типы для свойств (например, radius как number | string), или не учесть, что интерфейс может быть расширен без нарушения контракта.
Пример плохого кода:
TYPESCRIPTinterface Shape {kind: string; // не литералradius?: number;width?: number;height?: number;}function area(shape: Shape) {if (shape.kind === 'circle') return Math.PI * shape.radius! ** 2;// ... switch}
Проблемы: kind не сужается, radius может отсутствовать, нет гарантии корректности.
Хороший вариант:
TYPESCRIPTinterface Shape {area(): number;}class Circle implements Shape {constructor(private radius: number) {}area() { return Math.PI * this.radius ** 2; }}function calculateArea(shape: Shape) {return shape.area();}
Такой код легко расширяется, типизирован и не требует изменения существующей логики.
> Похожие задачи по frontend
Как сделать функцию getProperty с типизацией и проверкой ключей в TypeScript?
Что такое типы any и unknown в TypeScript
Почему проверка типа через instanceof не работает с интерфейсами в TypeScript
Какие сущности TypeScript остаются в рантайме после транспиляции
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью