Каждый, кто работал в крупном enterprise-монорепозитории на сотни тысяч строк TypeScript, не понаслышке знает главную боль современного фронтенда: скорость компилятора tsc.
Ты поправил одну строчку кода, нажал сохранить, сборщик Vite или Turbopack на лету пересобрал бандл за 50 миллисекунд, но чтобы запустить валидацию типов перед коммитом через tsc --noEmit, приходится ждать полторы-две минуты. В результате разработчики начинают отключать тайпчекинг в локальных прекоммит-хуках, перекладывая проверку на медленный CI/CD, где очереди тестов растягиваются на часы.
Причина этой проблемы фундаментальна: официальный компилятор tsc написан на самом TypeScript и выполняется в однопоточном рантайме Node.js. Сборщик мусора V8 постоянно тратит драгоценные миллисекунды на аллокацию и очистку миллионов мелких AST-узлов и структур типов.
Сегодня развитие TypeScript движется по двум параллельным и захватывающим траекториям:
- Эволюция типовой системы от Microsoft: официальная бета-версия TypeScript 7.1 Beta, принесшая долгожданную поддержку атрибутов импорта в файлах деклараций и оптимизацию вложенных union-типов.
- Аппаратная революция на Rust: амбициозный проект
tsrs, создающий независимый параллельный тайп-чекер на Rust с целью ускорить валидацию типов в 10–20 раз.
Давай детально разберем оба крыла этой инженерной эволюции.
Что нового в TypeScript 7.1 Beta?
Команда Андерса Хейлсберга в Microsoft продолжает полировать типовую систему, внедряя свежие стандарты комитета TC39.
1. Атрибуты импорта (Import Attributes) в амбиентных модулях
Стандарт ECMAScript утвердил синтаксис атрибутов импорта: import data from './data.json' with { type: 'json' }. Это критически важная мера безопасности: атрибут гарантирует, что среда выполнения выполнит строгую проверку MIME-типа и откажется исполнять файл, если злоумышленник попытается подсунуть исполняемый JavaScript под видом JSON.
Однако до версии 7.1 разработчики не могли типизировать подобные импорты в файлах деклараций (.d.ts). В TypeScript 7.1 Beta ключевое слово with получило первоклассную поддержку в амбиентных объявлениях:
// ambient-declarations.d.ts — поддержка Import Attributes в TS 7.1 Beta
declare module "*.json" with { type: "json" } {
const data: {
readonly version: string;
readonly features: Record<string, boolean>;
};
export default data;
}
declare module "*.wasm" with { type: "webassembly" } {
const module: WebAssembly.Module;
export default module;
}
Теперь при попытке импортировать файл без обязательного атрибута компилятор выдаст строгую ошибку типов еще до сборки:
// app.ts
// УСПЕШНО: тип строго совпадает с амбиентной декларацией
import appConfig from './appsettings.json' with { type: 'json' };
// ОШИБКА TS: Отсутствует атрибут with { type: 'json' }
// import badConfig from './appsettings.json';
2. Оптимизация памяти при глубоких типах союзов (Union Types)
В сложных библиотеках валидации схем (вроде Zod, ArkType или TypeBox) генерация сложных союзов из десятков вариантов часто приводила к исчерпанию лимита памяти Node.js (JavaScript heap out of memory) и драматическому падению скорости тайпчекинга. В 7.1 алгоритм нормализации объединений был переписан: компилятор использует структурный шеринг дескрипторов (Structural Sharing) и кэширование нормализованных сигнатур, снизив потребление RAM на 12–15% на тяжелых кодовых базах.
3. Стабилизация режима Isolated Declarations
Еще один важнейший шаг — дальнейшее развитие флага isolatedDeclarations: true. Этот режим требует, чтобы экспортируемые функции и переменные имели явные аннотации типов. За счет этого внешние быстрые сборщики (Oxlint, Rspack, esbuild) могут мгновенно генерировать файлы типов .d.ts без необходимости запускать тяжелый семантический анализ всего графа проекта.
О том, как параллельные линтеры ускоряют проверки в связке с типизацией, мы ранее рассказывали в разборе стабильного Type-Aware линтинга в Oxlint.
Проект tsrs: переосмысление Type Checker на Rust
Пока Microsoft развивает спецификацию языка, сообщество высокопроизводительных инструментов взялось за решение главной боли — скорости работы ядра.

Проект tsrs — это полноценный компилятор и тайп-чекер TypeScript, разрабатываемый на языке Rust.
В чем фундаментальное отличие архитектуры tsrs от tsc?
1. Аренная аллокация памяти (Memory Arenas / Bump Allocation)
В классическом tsc каждый узел абстрактного синтаксического дерева (AST) и каждый тип — это отдельный объект в куче V8.
В tsrs используется крейт typed-arena: память под AST и таблицы символов выделяется огромными непрерывными блоками (Arenas). Создание нового типа сводится к сдвигу одного указателя в памяти (Bump Allocation). А когда файл проверен, вся арена освобождается за одну машинную операцию без нагрузки на сборщик мусора.
2. Настоящий параллелизм (Multi-threaded Type Checking)
Движок Node.js однопоточен. tsrs использует пул рабочих потоков на базе библиотеки rayon и архитектуру акторов:
- Парсинг сотен файлов исходников происходит параллельно по всем ядрам процессора.
- Фаза разрешения модулей (Module Resolution) выполняется асинхронно без блокировок.
- Граф зависимостей типов разделяется между потоками через структуры данных со свойствами Read-Only/Copy-on-Write.
Вот как выглядит вызов tsrs в терминале:
# Проверка типов в проекте на 200 000 строк кода
# Классический tsc: 78.4 секунды
# tsrs на 16-ядерном процессоре: 4.2 секунды!
tsrs check --project tsconfig.json --threads 16
Текущий статус и взгляд в будущее
Важно трезво оценивать зрелость обоих проектов:
- TypeScript 7.1 Beta — стабильный, надежный инструмент от авторов языка, который уже готов к тестированию в рабочих проектах и станет стандартом через несколько недель.
- tsrs — находится в фазе активного развития. На сегодняшний день компилятор проходит около 75% официального тестового набора соответствия (Conformance Test Suite) репозитория TypeScript. Главная сложность — поддержка редких краевых случаев вывода типов в сложных условных типах (Conditional Types).
Однако вектор развития предельно ясен: веб-инструменты окончательно переходят на нативный компилируемый код. И появление быстрого тайп-чекера на Rust станет финальным элементом мозаики, который сделает разработку на TypeScript по-настоящему мгновенной.
