typescript
TypeScript — строго типизированный язык программирования, разработанный Microsoft и впервые выпущенный в 2012 году. Он является надмножеством JavaScript: любой валидный JavaScript-код является валидным TypeScript-кодом. TypeScript добавляет опциональную статическую типизацию, интерфейсы, обобщения (generics) и другие конструкции, которые проверяются во время компиляции и затем удаляются при трансляции в чистый JavaScript.
Зачем нужен TypeScript в JavaScript-проектах
JavaScript — динамически типизированный язык: тип переменной определяется во время выполнения, а не при написании кода. Это гибко, но приводит к целому классу ошибок, которые обнаруживаются только в рантайме. TypeScript решает эту проблему: компилятор проверяет корректность типов ещё до запуска программы и выдаёт понятные ошибки прямо в редакторе кода.
Практический эффект ощущается особенно в крупных кодовых базах: рефакторинг становится безопаснее (компилятор находит все затронутые места), а автодополнение в IDE — точнее. Исследования Microsoft показывают, что TypeScript позволяет обнаружить около 15% JavaScript-ошибок статически.
Система типов TypeScript
TypeScript предлагает богатую систему типов, включающую:
- Примитивные типы: string, number, boolean, null, undefined, symbol, bigint.
- Массивы и кортежи: number[], Array<string>, [string, number].
- Объектные типы и интерфейсы: описывают форму объекта с именованными свойствами и их типами.
- Union и Intersection: string | number — значение одного из типов; A & B — значение, удовлетворяющее обоим типам.
- Generics: параметрические типы, позволяющие писать переиспользуемый типобезопасный код: function identity<T>(arg: T): T.
- Mapped types и Conditional types — мощные механизмы трансформации типов на уровне системы типов.
- Literal types: переменная может принимать только конкретное значение: "GET" | "POST".
- Type guards: сужение типа внутри условных блоков через проверки typeof, instanceof или пользовательские функции.
Интерфейсы и типы: в чём разница
TypeScript предоставляет два способа описать форму объекта: interface и type. Интерфейсы можно расширять через extends и дополнять через декларативное слияние (declaration merging) — удобно для расширения сторонних типов. Type aliases универсальнее: поддерживают union, intersection, mapped и conditional types. На практике обе конструкции взаимозаменяемы для объектных типов; рекомендации команды зависят от стиля.
Строгий режим и настройка tsconfig
Поведение TypeScript настраивается через файл tsconfig.json. Флаг "strict": true включает группу проверок, настоятельно рекомендованных для новых проектов:
- strictNullChecks — null и undefined не присваиваются типам без явного указания.
- noImplicitAny — запрещает неявный тип any.
- strictFunctionTypes — строгая проверка типов параметров функций.
Дополнительные опции: target (версия JavaScript на выходе), module (система модулей), paths (алиасы импортов), baseUrl.
TypeScript в экосистеме современного frontend
Сегодня TypeScript фактически стал стандартом в JavaScript-экосистеме. React, Next.js, Angular (написан полностью на TS), Vue 3, NestJS — все эти фреймворки имеют первоклассную поддержку TypeScript. Большинство крупных npm-пакетов поставляются с файлами .d.ts (определения типов) или имеют их в репозитории DefinitelyTyped (@types/*).
Декораторы и метаданные
TypeScript поддерживает декораторы — синтаксис для аннотирования классов, методов и свойств метаданными. Они широко используются в Angular (@Component, @Injectable) и NestJS (@Controller, @Get). В 2023 году декораторы были стандартизированы в предложении TC39 Stage 3, и TypeScript 5.0 добавил поддержку нового синтаксиса.
Производительность и инструменты
TypeScript-компилятор (tsc) может быть медленным для крупных проектов. Для ускорения сборки используют esbuild или SWC — компиляторы на Rust/Go, которые транспилируют TS в JS без проверки типов (type checking остаётся на tsc). Vite, Next.js Turbopack и другие современные инструменты используют именно такой подход: быстрый рантайм + отдельная проверка типов в CI.
Где применяется TypeScript
TypeScript используется на frontend (React, Angular, Vue), на backend (Node.js, NestJS, Deno — который поддерживает TS нативно), в мобильной разработке (React Native), в serverless-функциях (AWS Lambda, Vercel Edge Functions) и даже для скриптинга вместо bash в Node.js-окружениях. GitHub, Slack, Airbnb, Microsoft — всё это компании, активно использующие TypeScript.
Частые вопросы
TypeScript заменяет JavaScript или дополняет его?
Дополняет. TypeScript транспилируется в JavaScript; браузеры и Node.js не понимают TypeScript напрямую. TypeScript добавляет статическую типизацию и расширенный синтаксис поверх JavaScript, сохраняя полную обратную совместимость: любой JS-файл можно переименовать в .ts и постепенно добавлять типы.
Обязательно ли указывать типы для каждой переменной?
Нет. TypeScript умеет выводить типы из контекста (type inference). Например, const x = 42 автоматически получает тип number без явной аннотации. Типы нужно указывать явно там, где вывод не справляется: в параметрах функций, в возвращаемых типах публичных API, для сложных структур.
Что такое тип any и почему его стоит избегать?
Тип any отключает проверку типов для данной переменной — она может принимать любое значение, и компилятор не выдаёт предупреждений. Это удобно при постепенной миграции, но лишает проекта гарантий типобезопасности. Вместо any рекомендуется использовать unknown (требует явной проверки перед использованием) или точные типы.
Другие термины в теме «Веб-разработка»
Не хватает деталей?
Напишите, что уточнить по теме «typescript» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).