TypeScript

Материал из llmdocs — справочник разработчика
TypeScript
АвторАндерс Хейлсберг (Microsoft)
Первый выпускоктябрь 2012
Парадигмамультипарадигменный, надмножество JavaScript
Типизациястатическая, структурная, постепенная
Компиляторtsc (написан на TypeScript; порт на Go — TypeScript 7)
Расширения файлов.ts, .tsx, .d.ts
ЛицензияApache 2.0
Сайтtypescriptlang.org

TypeScript — язык программирования от Microsoft, являющийся надмножеством JavaScript: любой корректный JavaScript-код — это корректный TypeScript, к которому добавлена система статических типов. Компилятор tsc проверяет типы и стирает их, выдавая обычный JavaScript, который выполняется в браузере или Node.js. Язык позволяет находить ошибки до запуска, даёт редактору точное автодополнение и безопасный рефакторинг.[1]

История

TypeScript представил Андерс Хейлсберг (автор Turbo Pascal, Delphi и C#) в 2012 году — как ответ на трудности сопровождения больших JavaScript-кодовых баз. Ранние версии конкурировали с Dart от Google и CoffeeScript, но выиграли за счёт совместимости: можно переводить проект на TypeScript постепенно, файл за файлом. Переломным стал 2016 год, когда Angular 2 был написан на TypeScript, а пакеты @types из репозитория DefinitelyTyped дали типы для тысяч библиотек на чистом JavaScript.[4] Сегодня TypeScript — язык по умолчанию для React, Vue, Angular, серверных фреймворков и инструментов сборки.

В 2025 году Microsoft объявила о переписывании компилятора на Go (проект Corsa, версия TypeScript 7): нативный компилятор проверяет крупные проекты примерно в десять раз быстрее.[3]

Система типов

Типизация в TypeScript структурная: совместимость типов определяется формой объекта, а не именем класса — в отличие от номинальной типизации Java или C#. Она постепенная: тип any отключает проверку, что позволяет мигрировать по частям (сходный подход — аннотации типов в Python).

interface User {
  id: number;
  name: string;
  email?: string;          // необязательное поле
}

type Result<T> = { ok: true; value: T } | { ok: false; error: string };

function find(users: User[], id: number): Result<User> {
  const u = users.find(x => x.id === id);
  return u ? { ok: true, value: u } : { ok: false, error: "not found" };
}

const r = find([], 1);
if (r.ok) console.log(r.value.name);   // сужение типа: здесь r.value доступен

Важные возможности:

  • Объединения и сужение (string | number, проверки typeof, размеченные объединения, как Result выше).
  • Дженерики — параметризованные функции и типы.
  • Вывод типов — аннотации нужны в основном на границах функций.
  • Вычисляемые типы: keyof, условные типы, mapped types, шаблонные строковые типы, утилиты Partial<T>, Pick<T, K>, ReturnType<F>.
  • Файлы объявлений .d.ts — описание типов для кода на JavaScript.

Система типов намеренно не является строго корректной (sound): ради удобства допускаются некоторые небезопасные преобразования, а типы во время выполнения не существуют — данные извне (JSON из API) нужно проверять отдельно, например библиотекой Zod.

Настройка и инструменты

Проект описывается файлом tsconfig.json. Ключевые параметры: strict (включает набор строгих проверок, рекомендуется всегда), target (версия выходного JavaScript), module и moduleResolution, noEmit (только проверка, без генерации кода).[2]

npm install --save-dev typescript
npx tsc --init          # создать tsconfig.json
npx tsc --noEmit        # проверить типы

Во многих проектах tsc используется только для проверки, а «стирание» типов выполняют быстрые инструменты — esbuild, swc, Vite. Начиная с версии 23.6 Node.js умеет запускать .ts-файлы напрямую, просто удаляя аннотации (type stripping), а Deno и Bun поддерживают TypeScript изначально.[5] Комитет TC39 обсуждает предложение добавить синтаксис аннотаций типов в сам JavaScript, чтобы движки игнорировали их как комментарии.[6]

Критика

  • Шаг сборки и сложность конфигурации (модули ESM/CommonJS, пути).
  • Сложные типы на уровне шаблонов трудно читать и они замедляют проверку.
  • Ложное чувство безопасности: типы не проверяются во время выполнения.

См. также

Источники

  1. TypeScript Handbook
  2. TypeScript — tsconfig reference
  3. Microsoft — A 10x Faster TypeScript (порт компилятора на Go)
  4. DefinitelyTyped
  5. Node.js — Running TypeScript Natively
  6. TC39 — Type Annotations proposal