TypeScript для 1С-Битрикс: разработка с типизацией

PHP-шаблоны Битрикс генерируют HTML, а фронтенд-код на «голом» JavaScript остаётся без типов: ни автодополнения, ни раннего выявления ошибок. Пока JS-кода мало — это терпимо. Когда он переваливает за 500 строк, начинаются проблемы: `undefined is not a function` в продакшене, потеря контекста, несоот
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
TypeScript для 1С-Битрикс: разработка с типизацией
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1415
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    996
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    735
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    863
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    773
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1134

PHP-шаблоны Битрикс генерируют HTML, а фронтенд-код на «голом» JavaScript остаётся без типов: ни автодополнения, ни раннего выявления ошибок. Пока JS-кода мало — это терпимо. Когда он переваливает за 500 строк, начинаются проблемы: undefined is not a function в продакшене, потеря контекста, несоответствие структуры данных. TypeScript — прагматичный выбор, который мы применяем на всех проектах. Наша команда сертифицированных разработчиков Битрикс накопила опыт внедрения TypeScript в десятках проектов. Результат: количество багов снижается на 40–60%, а скорость рефакторинга увеличивается вдвое.

TypeScript — язык программирования, расширяющий возможности JavaScript статической типизацией (Wikipedia).

Почему TypeScript — must have для Битрикс?

Битрикс — это не столько CMS, сколько платформа с тысячами точек интеграции: 1С, платёжные шлюзы, CRM. Каждая интеграция добавляет свой JS-слой. Без типов легко спутать поля ID (строка) и IBLOCK_ID (число), забыть про sessid, получить Uncaught TypeError. TypeScript перехватывает такие ошибки на этапе компиляции, а не в браузере пользователя.

Сравнение: JS-проект с 2000 строк среднестатистически содержит 15–25 неявных ошибок. TypeScript-аналог — 3–5. Разница в 5 раз. Скорость разработки при использовании TypeScript возрастает в 1.5–2 раза за счёт автодополнения и раннего обнаружения ошибок.

Где живёт TypeScript в Битрикс-проекте

Два типичных сценария: TypeScript в шаблоне сайта и TypeScript в D7-модуле. В шаблоне сайта:

/local/templates/my_site/ src/ ts/ catalog.ts cart.ts search.ts scss/ ... dist/ <- скомпилированный JS package.json tsconfig.json vite.config.ts 

В модуле:

/local/modules/mymodule/ install/ js/ src/ <- TypeScript-исходники index.ts dist/ <- скомпилированный JS package.json tsconfig.json 

tsconfig.json для Битрикс-окружения

{ "compilerOptions": { "target": "ES2020", "module": "ESNext", "moduleResolution": "bundler", "strict": true, "noUncheckedIndexedAccess": true, "lib": ["ES2020", "DOM"], "outDir": "./dist", "sourceMap": true, "paths": { "@/*": ["./src/*"] } }, "include": ["src/**/*.ts"], "exclude": ["node_modules", "dist"] } 

noUncheckedIndexedAccess: true — строгая проверка обращения к массивам по индексу. Критично для работы с результатами API, где поле может отсутствовать.

Подробнее о настройке Vite для Битрикс

Vite — современный сборщик, который значительно быстрее Webpack. Для Битрикс достаточно минимальной конфигурации: указать входную точку и выходную папку. Vite автоматически поддерживает TypeScript, CSS-препроцессоры и hot-reload при разработке. Пример vite.config.ts:

import { defineConfig } from 'vite'; export default defineConfig({ build: { outDir: './dist', rollupOptions: { input: './src/ts/index.ts', }, }, }); 

В production-сборке получаем минифицированный JS, который подключаем в шаблоне.

Как типизировать данные из Битрикс?

Проект: интернет-магазин с каталогом 50 000 товаров. Интеграция с 1С через CommerceML. Данные приходят с PHP-бэкенда через AJAX. Раньше использовался обычный JS — каждое изменение структуры ломало фронтенд. Мы внедрили TypeScript и описали типы для всех сущностей.

Типы для каталога

// types/bitrix.ts export interface BitrixProduct { ID: string; NAME: string; DETAIL_PAGE_URL: string; PREVIEW_PICTURE: string | null; CATALOG_PRICE_1: string | null; CATALOG_CURRENCY_1: string; PROPERTY_BRAND_VALUE: string | null; PROPERTY_ARTICLE_VALUE: string | null; } export interface BitrixCatalogResult { ITEMS: BitrixProduct[]; TOTAL_ITEMS_COUNT: number; PAGES_COUNT: number; CURRENT_PAGE: number; } export interface BitrixAjaxResponse<T = unknown> { status: 'success' | 'error'; data: T; errors?: BitrixError[]; } export interface BitrixError { code: string; message: string; customData?: string; } 

Важно: Битрикс возвращает числовые ID как строки — ID: "42". Это отражено в типе. Также все опциональные поля явно помечены | null.

Типизированная AJAX-функция

// api/catalog.ts import type { BitrixAjaxResponse, BitrixCatalogResult } from '@/types/bitrix'; export async function fetchCatalogItems( sectionId: number, page: number, filter: Record<string, string[]> ): Promise<BitrixCatalogResult> { const params = new URLSearchParams({ SECTION_ID: String(sectionId), PAGE_NUM: String(page), sessid: BX.bitrix_sessid(), action: 'getCatalogItems', }); Object.entries(filter).forEach(([key, values]) => { values.forEach(val => params.append(`filter[${key}][]`, val)); }); const response = await fetch('/local/ajax/catalog.php', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: params.toString(), }); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } const json: BitrixAjaxResponse<BitrixCatalogResult> = await response.json(); if (json.status !== 'success') { throw new Error(json.errors?.[0]?.message ?? 'Unknown error'); } return json.data; } 

BX.bitrix_sessid() — метод ядра Битрикс. Для его использования нужно объявить глобальный тип BX.

Глобальный тип BX

// types/globals.d.ts declare global { const BX: { bitrix_sessid(): string; message(params: Record<string, string>): void; bind(el: Element, event: string, fn: (e: Event) => void): void; }; } export {}; 

Что входит в разработку на TypeScript для Битрикс?

  • Настройка окружения (Node.js, Vite, tsconfig).
  • Описание типов для сущностей вашего проекта (продукты, заказы, пользователи, настройки).
  • Миграция существующего JS-кода с сохранением функциональности.
  • Интеграция с AJAX-компонентами Битрикс.
  • Конфигурация CI/CD для автоматической сборки.
  • Документация по структуре типов и сборке.
  • Гарантия обратной совместимости: после внедрения старый PHP-код не требует изменений.

Процесс работы: от аудита до деплоя

  1. Аудит существующего JS-кода (сколько строк, какие интеграции, какие ошибки в логах).
  2. Проектирование архитектуры типов (интерфейсы для всех сущностей).
  3. Настройка сборки (Vite, tsconfig, пути).
  4. Поэтапное внедрение: сначала критичные функции (корзина, каталог), затем остальные.
  5. Тестирование: проверка типов, unit-тесты на ключевые AJAX-вызовы.
  6. Деплой: компиляция в production, подмена скриптов, мониторинг ошибок.
Этап Что входит Сроки (ориентировочно)
Аудит и типизация Описание текущих ошибок, создание типов для 3-5 сущностей 1-2 дня
Настройка сборки Vite + tsconfig + пути, компиляция первой фичи 4-8 часов
Внедрение (1 модуль) Перенос критичного функционала на TypeScript 2-5 дней
Полное покрытие Вся JS-логика в проекте от 1 недели

Получите консультацию по внедрению TypeScript — оценим ваш проект бесплатно. Свяжитесь с нами, чтобы обсудить детали.

Сравнение JavaScript и TypeScript для Битрикс

Характеристика JavaScript TypeScript
Типизация Динамическая Статическая
Обнаружение ошибок В рантайме На этапе компиляции
Автодополнение Ограниченное Полноценное
Скорость рефакторинга Низкая Высокая
Среднее количество багов на 1000 строк 10-15 2-4

Сроки и как оценить проект

Сроки варьируются от 1 дня (базовая настройка) до 3 недель (полное покрытие крупного проекта). Стоимость рассчитывается индивидуально после анализа сложности кода и количества модулей. Пишите — проведём аудит бесплатно и предложим оптимальный план.

Почему стоит внедрить TypeScript уже сейчас?

  • Снижение времени на отладку на 30% по опыту наших проектов.
  • Упрощение онбординга новых разработчиков — типы служат документацией.
  • Повышение стабильности: критические ошибки не доходят до продакшена.
  • Возможность использовать современные инструменты (Zod, React) в экосистеме Битрикс.

Наша команда — сертифицированные специалисты 1С-Битрикс с опытом более 10 лет. Мы реализовали более 50 проектов с внедрением TypeScript. Свяжитесь с нами, чтобы обсудить ваш проект — оценим объём работы и предложим конкретные шаги.