Эта страница переведена с английской документации. Команды, идентификаторы и примеры не изменены. Среда выполнения 7.24.4 · SDK 2.6.7. Английский оригинал
Нативная поддержка TypeScript
Статус: активно в исходниках; выпуск упакованной среды выполнения ещё впереди Область: текущая исходная цепочка инструментов и языковая служба Последняя проверка: 2026-09-14 Владелец: сопровождающие AX Code
AX Code использует официальный компилятор TypeScript 7.0.2 на Go для проверок рабочей
области, выпуска SDK и встроенного языкового сервера JavaScript/TypeScript.
Языковой сервер запускает поставляемый нативный исполняемый файл напрямую через
--lsp --stdio. Он не вызывает запускатель реестра и не скачивает плавающую
версию языкового сервера. Чтобы пользоваться AX Code, цепочка Go не нужна.
Зависимости ставьте через pnpm install, включая необязательные зависимости.
Нативному компилятору нужен соответствующий пакет ОС и процессора. Автономные сборки готовят
и проверяют этот пакет до поставки. Отсутствующий или несовпадающий двоичный файл даёт
понятную ошибку вместо тихого запуска сервера на JavaScript.
Совместимость API компилятора
Рабочая область закрепляет @typescript/native на npm:typescript@7.0.2 и оставляет
typescript как псевдоним npm:@typescript/typescript6@6.0.2 для инструментов, которые импортируют
устаревший JavaScript Compiler API. Проверки типов и выпуск SDK используют нативный
компилятор. API совместимости не является языковым сервером по умолчанию.
Инструменты каркасов Vue, Svelte и Astro используют собственную интеграцию сервера; совместимость библиотеки TypeScript не означает поддержку плагинов компилятора. Преобразование JSX в SolidJS по-прежнему идёт через Babel. Тесты среды выполнения и выпущенные артефакты должны проходить независимо от успешной проверки типов.
Диагностика и память
Нативный TypeScript использует вытягивающую диагностику. AX Code запрашивает её, когда вызывающая сторона просит дождаться диагностики или собирает инвентарь диагностики. Одной синхронизации файла недостаточно, чтобы ждать проверки типов. Правки делают зависимые кэшированные результаты недействительными; устаревшие, ожидающие или неудачные инвентари агрегированный API диагностики сообщает как частичные или ухудшенные. Успешное вытягивание обновляет этот файл. Запросы обновления сервера помечают кэшированные результаты устаревшими; следующий запрос диагностики обновляет их по требованию. Фоновый трафик сервера не продлевает время простоя. Правки файлов всё ещё могут в фоне обновлять ранее запрошенные документы. Необработанный API записей обновляет устаревшие результаты в пределах ограниченного бюджета сбора и отвергает неполные инвентари; инструменты правки сообщают об этом состоянии, не теряя успешную правку файла. Другие языковые серверы сохраняют своё прежнее поведение проталкивающей диагностики.
Перекрывающиеся явные ожидания диагностики одного файла делят запрос только внутри того же поколения рабочей области. Последовательные запросы всё равно обновляют данные; смена рабочей области не даёт переиспользовать более старый запрос в полёте. Фоновое обновление и обновление инвентаря заново проверяют свежесть после ожидания блокировки документа.
Успешные удаления и перемещения в патче закрывают удалённые исходные документы в языковой службе. Неудачные транзакции патча сохраняют состояние документов. Очистка имеет общий двухсекундный срок и пропускает пути, которые более поздняя операция того же патча создала заново. Незавершённая очистка сообщается без отмены сохранённых правок. Если доставка на сервер истекает по времени, диагностика остаётся неполной, пока этот клиент не перезапустится.
Простаивающие языковые серверы освобождаются через 30 минут в обычном профиле памяти
или через пять минут с AX_CODE_MEMORY_PROFILE=low. Освобождение идёт по
существующему минутному интервалу проверки здоровья и ждёт, пока активные и стоящие в очереди
запросы улягутся. Серверы запускаются снова по требованию. AX_CODE_LSP_IDLE_MS переопределяет
длительность простоя в миллисекундах; 0 отключает освобождение при простое. Недопустимые значения
берут значение профиля по умолчанию. Эти параметры не задают потолок ОЗУ процесса и
бюджет на всю машину. Упреждающий прогрев остаётся по согласию.
Освобождение сервера отбрасывает его инвентарь диагностики. Агрегированные результаты остаются помеченными как ухудшенные, пока ранее открытые документы не будут открыты снова и проверены или явно удалены. Необработанный API инвентаря отвергает неполное покрытие. Журнал покрытия ограничен 2 000 путей; переполнение консервативно остаётся неполным, пока экземпляр проекта не будет уничтожен. Освобождение пустого сервера не теряет покрытие. Инструменты правки сохраняют сохранённые изменения и сообщают, что диагностика неполна. Чтобы установить, чист ли проект, выполните полную проверку типов проекта.
Нативная компиляция не гарантирует определённого снижения резидентной памяти. Сравнивайте один и тот же проект, открытые документы, запросы и RSS дерева процессов, прежде чем заявлять о памяти.
Явное переопределение сервера
Существующая доверенная конфигурация lsp.typescript.command по-прежнему перекрывает
встроенный нативный сервер. Для устаревшего сервера установите и закрепите сервер и совместимый
SDK TypeScript в проекте, затем укажите command на этот установленный
исполняемый файл через --stdio. Избегайте незакреплённых команд npx. Переопределение явно;
AX Code не переходит на запасной вариант автоматически, если нативный компилятор недоступен.
Вышестоящий источник: анонс TypeScript 7.
Совместимость сохранённых документов TypeScript 7.0.2
Нативный сервер 7.0.2 может вернуть более ранний снимок диагностики, когда трафик наблюдения за файлами перекрывает сохранённые правки. AX Code закрывает и снова открывает изменённые документы для этой точной версии сервера перед запросом диагностики. Один ограниченный запрос документа сбрасывает отложенное закрытие перед повторным открытием; остальные запросы ждут этой замены. Отправляется полный изменённый документ; неизменённые документы по-прежнему переиспользуют перекрывающиеся запросы. Другие версии сервера сохраняют согласованный режим синхронизации. Прерванная замена остаётся незавершённой, пока языковой сервер не перезапустится.