Назад к блогу
Guide2 мин чтения

Разработка на TypeScript для FiveM: современные скрипты с типами

Пишите скрипты FiveM на TypeScript. Настройка сборки, типы natives, бандлинг и почему ведущие разработчики переходят с обычного Lua на TS в 2026 году.

Agency Scripts

Основатель и ведущий разработчик Agency Scripts

Почему TypeScript для FiveM?

TypeScript приносит статическую проверку типов, современные возможности JavaScript и превосходную поддержку IDE в разработку FiveM. Хотя Lua остается стандартным языком скриптов, TypeScript, скомпилированный в JavaScript, работает нативно в FiveM через JavaScript runtime. Безопасность типов ловит ошибки на этапе компиляции, которые иначе приводили бы к сбою сервера во время выполнения, автодополнение значительно ускоряет разработку, а интерфейсы делают ваш код самодокументируемым. Для сложных проектов с несколькими разработчиками TypeScript снижает накладные расходы на координацию и делает рефакторинг безопаснее.

Настройка проекта с fivem-ts-boilerplate

Самый быстрый способ начать проект TypeScript для FiveM , использовать сообщественный шаблон fivem-ts-boilerplate. Клонируйте репозиторий шаблона, запустите npm install для настройки зависимостей, и у вас есть готовая структура проекта с отдельными каталогами исходников для клиента, сервера и общего кода. Boilerplate включает конфигурацию webpack, которая компилирует TypeScript в JavaScript-бандлы, совместимые с FiveM, вместе с определениями типов для FiveM natives, функций citizen и общих API фреймворков. Собирайте ваш проект с помощью npm run build и вывод идет напрямую в папку ресурса.

Определения типов и нативы

Параметр @citizenfx/client и @citizenfx/server type пакеты предоставляют определения TypeScript для всех нативных функций и API вызовов FiveM. Эти определения обеспечивают автозаполнение для функций, таких как GetEntityCoords, SetEntityHealth , и RegisterCommand , показывая типы параметров и возвращаемые значения во время кодирования. Для API, специфичных для фреймворков, таких как QBCore или ESX, вы можете создавать или устанавливать дополнительные файлы определения типов, охватывающие экспорт и события фреймворка. Это превращает ваш IDE в интерактивный браузер документации для всего API FiveM.

Архитектура клиент-сервер

Структурируйте ваш проект на TypeScript с чётким разделением клиентского и серверного кода. Используйте директорию shared для интерфейсов, перечислений и утилит, необходимых с обеих сторон. Определяйте интерфейсы полезных нагрузок событий в shared types, чтобы компилятор проверял согласованность данных между клиентом и сервером. Импортируйте обёртки фреймворка из слоя services, который абстрагирует базовый фреймворк, делая вашу бизнес-логику переносимой между QBCore, ESX и standalone конфигурациями. Такая архитектура делает ваш код модульным и тестируемым.

Отладка TypeScript в FiveM

Отладка скомпилированного кода может быть сложной, так как выполняемый JavaScript отличается от вашего исходного TypeScript. Включите source maps в конфигурации webpack, чтобы трассировки ошибок ссылались на ваши оригинальные файлы TypeScript. Используйте console.log заявления, которые пересылаются в консоль сервера FiveM для серверной отладки. Для клиентской отладки инструменты разработчика NUI, доступные через F8, могут проверять выполнение JavaScript. Рассмотрите возможность добавления структурированного логгера с отметками времени, уровнями логов и ссылками на исходные файлы, чтобы упростить отслеживание проблем через скомпилированный вывод.

Миграция и сосуществование с Lua

Вам не нужно сразу переводить весь сервер на TypeScript. Ресурсы TypeScript прекрасно сосуществуют с Lua-ресурсами, так как они взаимодействуют через одну систему событий и экспортов. Начинайте создавать новые функции на TypeScript, сохраняя существующие Lua-скрипты. При вызове Lua-экспортов из TypeScript создавайте объявления типов, описывающие ожидаемые сигнатуры функций. Постепенно мигрируйте критические системы по мере освоения TypeScript. Такой поэтапный подход позволяет вашей команде учить TypeScript, сохраняя стабильность сервера и избегая рискованного полного переписывания.

Готовы начать?

Возьмите скрипты в нашем магазине или заходите в Discord за поддержкой, обновлениями и анонсами.