При работе с TypeScript и сервис-воркерами, особенно в сочетании с
библиотекой Workbox, ключевым элементом становится правильная
конфигурация tsconfig.json. Неправильная настройка может
привести к проблемам компиляции, ошибкам типов и некорректной работе
сервис-воркера в браузере.
tsconfig для сервис-воркера1. compilerOptions.module Для
сервис-воркеров важно выбрать совместимый модульный формат.
Рекомендуется использовать:
"module": "ESNext"
Использование ESNext обеспечивает поддержку современных
возможностей модулей, таких как динамический import(),
которые могут быть полезны при ленивой подгрузке ресурсов через
Workbox.
2. compilerOptions.target
Сервис-воркеры работают в современных браузерах, поэтому целевой
стандарт JavaScript можно задать как:
"target": "ES2022"
Это позволяет использовать новейшие возможности языка, такие как
async/await, Promise.any и другие функции, без
необходимости дополнительной трансформации кода.
3. compilerOptions.lib Для корректной
работы сервис-воркеров необходимо подключить соответствующие библиотеки
типов:
"lib": ["ES2022", "WebWorker"]
ES2022 — базовые современные возможности
JavaScript.WebWorker — содержит типы и глобальные объекты,
специфичные для контекста сервис-воркера (self,
FetchEvent, CacheStorage).4. compilerOptions.types Если
используется Workbox, рекомендуется подключить типы библиотеки, чтобы
компилятор корректно распознавал API:
"types": ["workbox-sw"]
Эта опция позволяет использовать автодополнение и проверку типов при
работе с workbox.routing, workbox.precaching и
другими модулями Workbox.
5. compilerOptions.outDir и
rootDir Для разделения исходного кода TypeScript и
скомпилированных JavaScript файлов необходимо указать:
"rootDir": "src",
"outDir": "dist"
rootDir — папка с исходными файлами TypeScript.outDir — папка, куда будет помещён скомпилированный
JavaScript, готовый для подключения в проект.6. compilerOptions.moduleResolution Для
корректного поиска модулей в проектах с Workbox рекомендуется:
"moduleResolution": "node"
Это обеспечивает поддержку современных модульных систем и корректное разрешение путей при импорте внешних библиотек.
strict Для безопасного использования
TypeScript рекомендуется включить строгий режим:
"strict": true
Он включает проверку типов, обязательность инициализации переменных и корректную обработку null/undefined.
noEmitOnError Позволяет предотвращать
генерацию JavaScript при наличии ошибок компиляции:
"noEmitOnError": true
Это особенно важно для сервис-воркеров, где ошибки компиляции могут привести к поломке всей оффлайн-логики.
Пример полного tsconfig.json для сервис-воркера
с Workbox:
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"lib": ["ES2022", "WebWorker"],
"types": ["workbox-sw"],
"strict": true,
"moduleResolution": "node",
"outDir": "dist",
"rootDir": "src",
"noEmitOnError": true
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}
self в
сервис-воркере имеет специальный тип
ServiceWorkerGlobalScope. При использовании TypeScript его
необходимо явно учитывать, чтобы методы addEventListener и
skipWaiting были корректно типизированы.moduleResolution: "node".Эта конфигурация обеспечивает корректную работу сервис-воркеров на TypeScript с библиотекой Workbox, упрощает типизацию, автодополнение и предотвращает большинство ошибок при сборке.