typescript-language-server

by TypeFox / community (open source) · Neovim, Emacs, Helix, VS Code (через volar/tsserver)

LSP Dev Tools Open Source v5.3.0 · 21.05.2026 активный

LSP-обёртка вокруг TypeScript compiler API (tsserver). Стандартный LSP-сервер для TypeScript и JavaScript — используется во всех редакторах кроме VS Code (у него свой tsserver). Возможности: - Полный TypeScript type checking и inference - Автодополнение: переменные, методы, импорты - Auto-import: автоматическое добавление import - Goto definition / find references - Rename refactoring через весь проект - Code actions: fix imports, extract function, convert - JSDoc поддержка - Поддержка JSX/TSX

v5.3.0
21.05.2026 current
Добавлен 18.06.2026 · Обновлён 18.06.2026 · Dev Tools
Установка
# npm:
npm install -g typescript typescript-language-server

# Neovim (nvim-lspconfig):
require('lspconfig').ts_ls.setup{}

# Emacs (lsp-mode):
(add-hook 'typescript-mode-hook #'lsp)

# Helix (languages.toml):
[[language]]
name = "typescript"
language-servers = ["typescript-language-server"]

# Проверить установку:
typescript-language-server --version
переведено ИИ

Discord npm version npm downloads

Сервер языка TypeScript

Что это, именно?

Проект/пакет TypeScript включает компонент tsserver, который предоставляет пользовательский API для сбора различной информации о проекте TypeScript/JavaScript. Команда VSCode создала проект под названием Typescript Language Features (и встроила его как внутреннее расширение в VSCode), который обеспечивает интеллектуальный анализ кода для ваших проектов JavaScript и TypeScript, используя этот API tsserver. Поскольку это расширение не использует стандартизированный Протокол языкового сервера для общения с редактором, другие редакторы, реализующие LSP, не могут напрямую его использовать. Здесь на помощь приходит проект TypeScript Language Server, целью которого является предоставление тонкой оболочки LSP поверх кодовой базы этого расширения для пользы всех остальных редакторов, реализующих протокол LSP.

Изначально проект был основан на концепциях и идеях из https://github.com/prabirshrestha/typescript-language-server и поддерживался компанией TypeFox. В настоящее время проект поддерживается сообществом участников, таких как вы.

Этот проект не связан напрямую с Microsoft и не используется в их редакторе VSCode. Если у вас есть проблема с функциональностью VSCode, сообщите о ней в их репозитории.

В настоящее время Microsoft работает над TypeScript 7, написанным нативно на языке Go, который будет включать реализацию LSP и, как ожидается, заменит этот проект.

Установка

npm install -g typescript-language-server typescript

Запуск языкового сервера

typescript-language-server --stdio

Параметры командной строки

  Использование: typescript-language-server [опции]


  Опции:

    -V, --version                          вывести номер версии
    --stdio                                использовать stdio (обязательная опция)
    --log-level <уровень-журнала>          Число, указывающее уровень журнала (4 = журнал, 3 = инфо, 2 = предупреждение, 1 = ошибка). По умолчанию `3`.
    -h, --help                             вывести информацию об использовании

Конфигурация

См. документацию по конфигурации.

Возможности

Действия кода при сохранении

Сервер объявляет о поддержке следующих типов действий кода:

  • source.fixAll.ts - несмотря на название, исправляет несколько конкретных проблем: недостижимый код, await в не-асинхронных функциях, неправильно реализованный интерфейс
  • source.removeUnused.ts - удаляет объявленные, но неиспользуемые переменные
  • source.addMissingImports.ts - добавляет импорты для используемых, но не импортированных символов
  • source.removeUnusedImports.ts - удаляет неиспользуемые импорты
  • source.sortImports.ts - сортирует импорты
  • source.organizeImports.ts - упорядочивает и удаляет неиспользуемые импорты

Это позволяет редакторам, поддерживающим запуск действий кода при сохранении, автоматически запускать исправления, связанные с этими типами.

Эти действия кода, если они применимы к текущему коду, также должны отображаться в списке "Действий источника", если редактор предоставляет такую возможность.

Пользователь может включить это с помощью параметра, подобного следующему (может отличаться в зависимости от редактора):

"codeActionsOnSave": {
    "source.organizeImports.ts": true,
    // или просто
    "source.organizeImports": true,
}

Команды рабочей области (workspace/executeCommand)

См. спецификацию LSP.

В большинстве случаев вы будете выполнять команды с аргументами, полученными из другого запроса, например, textDocument/codeAction. Существуют некоторые варианты использования для их ручного вызова.

lsp относится к типам протокола языкового сервера, tsp относится к типам протокола сервера TypeScript.

Перейти к исходному определению

Запрос:

{
    command: '_typescript.goToSourceDefinition'
    arguments: [
        lsp.DocumentUri,  // строковый URI документа
        lsp.Position,     // позиция строки и символа (с нуля)
    ]
}

Ответ:

lsp.Location[] | null

(Эта команда поддерживается начиная с TypeScript 4.7.)

Применить рефакторинг

Запрос:

{
    command: '_typescript.applyRefactoring'
    arguments: [
        tsp.GetEditsForRefactorRequestArgs,
    ]
}

Ответ:

void

Упорядочить импорты

Запрос:

{
    command: '_typescript.organizeImports'
    arguments: [
        string,  // путь к файлу
        // Опциональные параметры:
        {
            // @deprecated - используйте "mode". Поддерживается начиная с TypeScript 4.4+.
            skipDestructiveCodeActions?: boolean
            // 'All' - упорядочивает импорты, включая деструктивные действия (удаление неиспользуемых импортов)
            // 'SortAndCombine' - Не выполняет деструктивных действий.
            // 'RemoveUnused' - Только удаляет неиспользуемые импорты.
            mode?: 'All' | 'SortAndCombine' | 'RemoveUnused'
        },
    ]
}

Ответ:

void

Переименовать файл

Запрос:

{
    command: '_typescript.applyRenameFile'
    arguments: [
        { sourceUri: string; targetUri: string; },
    ]
}

Ответ:

void

Отправить команду Tsserver

Запрос:

{
    command: 'typescript.tsserverRequest'
    arguments: [
        string,       // команда
        any,          // аргументы команды в формате, ожидаемом командой
        ExecuteInfo,  // объект конфигурации, используемый для запроса tsserver (см. ниже)
    ]
}

Ответ:

any

Объект ExecuteInfo определен следующим образом:

type ExecuteInfo = {
    executionTarget?: number;  // 0 - семантический сервер, 1 - синтаксический сервер; по умолчанию: 0
    expectsResult?: boolean;   // по умолчанию: true
    isAsync?: boolean;         // по умолчанию: false
    lowPriority?: boolean;     // по умолчанию: true
};

Настроить плагин

Запрос:

{
    command: '_typescript.configurePlugin'
    arguments: [pluginName: string, configuration: any]
}

Ответ:

void

Кодовые линзы (textDocument/codeLens)

Кодовые линзы могут быть включены с помощью параметров конфигурации рабочей области implementationsCodeLens и referencesCodeLens.

Кодовые линзы предоставляют количество ссылок и/или реализаций для символов в документе. Для клиентов, которые это поддерживают, также можно нажимать на них для перехода к соответствующим местам в проекте. Обратите внимание, что нажатие на них запускает команду editor.action.showReferences, которую клиент должен поддерживать явно. Многие клиенты поддерживают это по умолчанию, но некоторые — нет. Пример команды будет выглядеть так:

command: {
    title: '1 reference',
    command: 'editor.action.showReferences',
    arguments: [
        'file://project/foo.ts',    // URI
        { line: 1, character: 1 },  // Позиция
        [                           // Список объектов Location.
            {
                uri: 'file://project/bar.ts',
                range: {
                    start: {
                        line: 7,
                        character: 24,
                    },
                    end: {
                        line: 7,
                        character: 28,
                    },
                },
            },
        ],
    ],
}

Встраиваемые подсказки (textDocument/inlayHint)

Для того чтобы запрос возвращал какие-либо результаты, некоторые или все следующие параметры должны быть включены через preferences:

export interface InlayHintsOptions extends UserPreferences {
    includeInlayParameterNameHints: 'none' | 'literals' | 'all';
    includeInlayParameterNameHintsWhenArgumentMatchesName: boolean;
    includeInlayFunctionParameterTypeHints: boolean;
    includeInlayVariableTypeHints: boolean;
    includeInlayVariableTypeHintsWhenTypeMatchesName: boolean;
    includeInlayPropertyDeclarationTypeHints: boolean;
    includeInlayFunctionLikeReturnTypeHints: boolean;
    includeInlayEnumMemberValueHints: boolean;
}

Уведомление о версии TypeScript

Сразу после инициализации сервер отправляет пользовательское уведомление $/typescriptVersion, которое содержит информацию о версии TypeScript, используемой сервером. Редактор затем может отобразить эту информацию в пользовательском интерфейсе.

Параметры уведомления $/typescriptVersion включают два свойства:

  • version - семантическая версия (например, 4.8.4)
  • source - строка, указывающая, является ли используемая версия TypeScript версией из локального рабочего пространства (workspace), явно указанной через настройку initializationOptions.tsserver.path (user-setting) или встроенной в сервер (bundled)

Запрос конфигурации рабочего пространства для настроек форматирования

Сервер запрашивает у клиента (при поддержке клиентом возможности workspace/configuration) параметры конфигурации, специфичные для файла (tabSize и insertSpaces), которые необходимы tsserver для корректного форматирования изменений в файле, например, при использовании «Упорядочить импорты» или выполнении других изменений файла. Эти параметры должны предоставляться клиентом/редактором динамически, поскольку их значения могут различаться для каждого файла. По этой причине сервер отправляет запрос workspace/configuration с scopeUri, равным URI файла, и section, равным formattingOptions. Ожидается, что клиент вернет конфигурацию, включающую следующие свойства:

{
    "tabSize": number
    "insertSpaces": boolean
}

Разработка

Сборка

pnpm build

Разработка

Сборка и пересборка при изменениях.

pnpm dev

Тестирование

  • pnpm test - запустить все тесты в режиме отслеживания для разработки
  • pnpm test:commit - запустить все тесты один раз

По умолчанию в консоль выводятся только журналы уровня warning и выше. Вы можете переопределить уровень CONSOLE_LOG_LEVEL в package.json на log, info, warning или error для вывода журналов других уровней.

Публикация

Проект использует Github-действие https://github.com/google-github-actions/release-please-action для автоматического выпуска новой версии при слиянии PR для выпуска.

Комментарии
Войдите, чтобы оставить комментарий