Почему одного JavaScript не всегда достаточно
Что может пойти не так в JavaScript и что проверяется до запуска.
JavaScript различает строки, числа и другие виды значений. Но имя переменной само по себе не закреплено за одним видом: например, функция может получить строку там, где автор ожидал число, и начать работу с ней.
function add(a, b) {
return a + b;
}
console.log(add(10, 5)); // 15
console.log(add(10, "5")); // "105"Во втором вызове один аргумент оказался строкой, поэтому + склеил значения. Код синтаксически допустим, но результат может не соответствовать намерению.
Проверка до запуска
В TypeScript можно описать, какие значения ожидает функция:
function add(a: number, b: number): number {
return a + b;
}
add(10, 5);
add(10, "5"); // Редактор покажет ошибку типа.TypeScript сообщает, что строку нельзя передать туда, где ожидается число. Такая проверка называется статической: инструменты разработки выполняют её до запуска программы. При этом TypeScript не заменяет JavaScript: перед запуском код TypeScript преобразуют в JavaScript.
Что TypeScript не делает
Типы TypeScript не проверяют данные, которые пользователь вводит в форму или которые пришли из сети. При выполнении программы эта информация о типах уже не служит проверкой входных данных. Поэтому на внешней границе нужны настоящие проверки: например, ограничения HTML для простых полей или схема Zod на сервере.
TypeScript также не обещает, что программа вообще не содержит ошибок. Он помогает находить несоответствия типов, но не решает за разработчика, правильно ли написана бизнес-логика.
Про историю с медицинским аппаратом
Возможно, вы имеете в виду аппарат лучевой терапии Therac-25. В расследовании Нэнси Левесон и Кларка Тёрнера описаны гонка в программном обеспечении, недостаточные проверки и отсутствие аппаратных блокировок. Это серьёзный пример ошибок в инженерии безопасности, но неверно объяснять его просто «неправильно объявленной переменной». TypeScript мог бы подсветить некоторые ошибки типов, но сам по себе не предотвращает гонки, ошибки требований или опасную архитектуру. Разбор Therac-25, IEEE Computer
Официальный вводный материал: TypeScript для программистов на JavaScript.
Если удобнее сначала посмотреть видео, в исходных материалах курса есть вводное видео о TypeScript и обзорный курс 2025 года. Видео помогают увидеть общую картину, но команды и особенности сверяйте с актуальной документацией.