TypeScript — это надстройка над JavaScript, реализующая статическую (строгую) типизацию. Это означает, что проверка типов происходит на этапе компиляции, а не во время выполнения, как в JavaScript.
Основные отличия:
Преимущества в крупных проектах:
Пример:
type User = { name: string; age: number; } function greet(user: User): string { return 'Hello, ' + user.name; } const u: User = { name: 'Ivan', age: 30 }; greet(u); // Ок
Вопрос: Можно ли объявить переменную типа any в проекте на TypeScript, и не потеряет ли проект преимущества строгой типизации?
Ответ:
Да, TypeScript позволяет использовать тип any, что эквивалентно отсутствию типизации для этой переменной. Если использовать any часто, это нивелирует основное преимущество TypeScript — строгую типизацию, и вы рискуете получить типичные ошибки времени выполнения, как и в JavaScript.
Пример:
let data: any = 'test'; data = 42; // Ошибка не возникнет, но может вызвать проблемы
История
Разработчик часто использовал тип
anyдля сложных объектов, чтобы "быстрее продвинуться". В результате, однажды прилетел объект с недостающими полями, и приложение падало на ровном месте: ошибка ушла в продакшн из-за отсутствия проверки типов.
История
В большом проекте обменивались сообщениями двух разных микросервисов. Один из сервисов изменил структуру объекта, но TypeScript не предупредил об этом, так как тип был явно задан как
any. Баг нашли спустя месяц по жалобам пользователя.
История
Молодой разработчик не описал тип возвращаемого значения у публичной функции, полагаясь на автоматическое выведение типа. После рефакторинга на другой стороне перестали работать ожидания типов, и возникли цепочки багов по всему проекту.