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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
TypeScript для 1С-Битрикс: разработка с типизацией
Средний
~1-2 недели
Часто задаваемые вопросы

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

Этапы разработки

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    944
  • 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
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    829
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1074

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. Свяжитесь с нами, чтобы обсудить ваш проект — оценим объём работы и предложим конкретные шаги.

Почему вёрстка сайтов на 1С-Битрикс требует профессионализма?

Открываете template.php у предыдущего подрядчика — а там SQL-запросы, бизнес-логика и inline-стили в одном файле. На каждом втором проекте, который берём на поддержку, код шаблонов выглядит как свалка: кэш не работает, добавить новую фичу — переписывай всё. Средняя стоимость исправления такой вёрстки сайтов — 15 000–30 000 рублей только на отладку, а потерянная выручка из-за сломанной корзины в пик сезона может уходить в миллионы. Наша команда с 10-летним опытом строго разделяет: логика — в result_modifier.php или component_epilog.php, представление — в template.php. Никакого CIBlockElement::GetList в шаблоне. Это сокращает время правок на 30–40% и исключает типовые ошибки, которые ломают кэш. Аналогичную проблему исправляли клиенту, который месяц не мог обновить блок «Акции» — после настройки тегированного кэша правки вставали за минуту, а не за день.

Как правильно организовать шаблоны компонентов?

Кастомный шаблон — это не один файл, а структура из пяти-шести файлов:

  • template.php — только HTML и вывод $arResult
  • result_modifier.php — подготовка данных, дополнительные выборки
  • component_epilog.php — код после кэширования (счётчики, динамика)
  • style.css и script.js — подключаются через Asset::getInstance()->addCss() и addJs() (не через <link> — иначе ломается объединение)
  • .parameters.php — параметры визуального редактора

Пример структуры для каталога:

local/templates/your_template/components/bitrix/catalog.section/.default/
├── template.php
├── result_modifier.php
├── component_epilog.php
├── style.css
├── script.js
└── .parameters.php

Типовые шаблоны, которые верстаем под ключ:

Компонент Что делаем
catalog.section и catalog.element Переключение вида (плитка/список/таблица), lazy load для изображений, srcset для ретины
sale.basket.basket AJAX-обновление без перезагрузки, мини-корзина через sale.basket.basket.line
menu Мегаменю с кэшированием по разделам, отложенная загрузка подменю
search.title Автоподсказки с дебаунсом 300 мс, превью товаров в дропдауне
breadcrumb Микроразметка BreadcrumbList по Schema.org

Кэширование: почему оно ломается и как чиним?

Компонентное кэширование в Битрикс ломается одной ошибкой: вывели имя пользователя внутри кэшированного каталога — все видят одно имя. Решение — component_epilog.php для динамических вставок.

Tagged cache ($this->setResultCacheKeys, CIBlock::clearIblockTagCache) настраиваем обязательно. Изменили товар — очищается кэш только этого товара, а не всего раздела. На проекте с 50 000 товаров это даёт прирост скорости на 40% по сравнению с полным сбросом.

Реальный кейс. Клиент жаловался — на странице каталога у всех одна корзина. Оказалось, предыдущий разработчик вывел $_SESSION['BASKET'] внутри template.php компонента catalog.section. Компонент кэшировался на час — корзина застыла. Перенесли вывод в component_epilog.php, настроили тегированный кэш на sale.basket.basket.line. Страница не потеряла в скорости, корзина стала актуальной. Ущерб от неработающей корзины в пик сезона мог составлять миллионы, а цена исправления — в пределах 15 000 рублей. Другой клиент потерял 200 000 рублей за неделю из-за некорректного кэша формы заказа — мы вернули работоспособность за два дня.

Официальная документация Битрикс рекомендует использовать component_epilog.php для динамических вставок — подробнее в руководстве.

CSS-подходы: BEM, Tailwind или гибрид?

Для больших проектов (30+ шаблонов) используем BEM — .product-card__price, .product-card--featured. Стили изолированы, конфликтов нет. Подробнее о BEM. В Битрикс обёртки с классами bx-component не трогаем — оборачиваем свой BEM-блок внутри.

Для типовых задач (лендинги, админки) берём Tailwind 3+ с PurgeCSS — итоговый CSS 10–30 КБ вместо сотен. Дизайн-токены в tailwind.config.js фиксируют цвета, шрифты, отступы в одном месте.

На большинстве проектов применяем гибрид: BEM для структурных компонентов (каталог, карточка, чекаут), Tailwind для утилитарных вещей (отступы, flex-раскладки). Границу оговариваем с командой заранее.

Как мы достигаем Core Web Vitals?

Critical CSS — выделяем стили первого экрана через пакет critical, инлайним в <head>. Остальное грузится асинхронно через media="print" onload="this.media='all'". LCP на мобильных сокращается на 1–1.5 секунды.

Изображения — главный тормоз. Используем <picture> с WebP и JPEG-фолбэком. loading="lazy" для всего ниже первого экрана. width и height явно прописаны — CLS = 0. Обработчик в urlrewrite.php генерирует WebP на лету.

Минификация и сжатие. CSS и JS через Vite или встроенное объединение Битрикс. Brotli на nginx (brotli_comp_level 6) — на 15–20% эффективнее gzip. Кэширование статики: expires 1y + версионирование через query string.

Хотите получить подобные показатели? Свяжитесь с нами — сделаем аудит вашего проекта и предложим конкретные шаги.

Что входит в услугу вёрстки сайтов на 1С-Битрикс?

После заказа вёрстки шаблона или адаптации готового решения передаём:

  • Исходники шаблонов компонентов с разделением на template.php, result_modifier.php, epilog
  • CSS и JS, подключённые через Asset — без инлайн-стилей
  • Настроенное кэширование с тегами
  • Документацию по структуре и параметрам
  • Доступ к Git-репозиторию с историей изменений
  • Обучение вашего разработчика: как править шаблон без потери обновляемости

Гарантируем соответствие Core Web Vitals и кроссбраузерность. Закрепляем инженера с опытом 10+ лет — получите консультацию по вашему проекту до начала работ.

Процесс работы:

  1. Анализ макетов и текущего проекта — выявляем компоненты для переработки
  2. Проектирование структуры — разбиваем страницу на BEM-блоки
  3. Реализация — верстаем шаблоны по схеме: template, result_modifier, epilog, CSS, JS
  4. Тестирование — проверяем кэш, адаптивность, Core Web Vitals, кроссбраузерность
  5. Деплой — стейджинг, приёмка, продакшен

На каждом этапе вы получаете промежуточный результат и можете внести правки. Свяжитесь с нами — оценим проект за 1–2 дня после получения макетов.

Сроки

Объём работ Срок
Лендинг (5–7 экранов) 3–5 дней
Корпоративный сайт (15–20 уникальных страниц) 2–4 недели
Интернет-магазин (30+ шаблонов компонентов) 4–8 недель
Кастомизация готового решения Маркетплейса 1–3 недели
Редизайн существующего проекта 3–6 недель

После анализа даём разбивку по компонентам — что переиспользуется, что верстается с нуля. Закажите предварительную консультацию — посчитаем сроки и бюджет индивидуально.