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-код не требует изменений.
Процесс работы: от аудита до деплоя
- Аудит существующего JS-кода (сколько строк, какие интеграции, какие ошибки в логах).
- Проектирование архитектуры типов (интерфейсы для всех сущностей).
- Настройка сборки (Vite, tsconfig, пути).
- Поэтапное внедрение: сначала критичные функции (корзина, каталог), затем остальные.
- Тестирование: проверка типов, unit-тесты на ключевые AJAX-вызовы.
- Деплой: компиляция в 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. Свяжитесь с нами, чтобы обсудить ваш проект — оценим объём работы и предложим конкретные шаги.







