Разработка на 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, сохраняя стабильность сервера и избегая рискованного полного переписывания.