[{"data":1,"prerenderedAt":2601},["ShallowReactive",2],{"navigation":3,"-docs-working-with-the-rest-api-tools-type":459,"-docs-working-with-the-rest-api-tools-type-description":2590},[4],{"title":5,"path":6,"stem":7,"children":8,"page":47},"Docs","\u002Fdocs","docs",[9,78,351],{"title":10,"path":11,"stem":12,"children":13,"restApiVersion":15,"category":15,"description":15,"badge":15},"Начало работы","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,17,48,63],{"title":10,"path":11,"stem":12,"restApiVersion":15,"category":15,"description":16,"badge":15},null,"Краткое руководство по работе с SDK для REST API Bitrix24",{"title":18,"path":19,"stem":20,"children":21,"page":47},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[22,27,32,37,42],{"title":23,"path":24,"stem":25,"restApiVersion":15,"category":15,"description":26,"badge":15},"Vue","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F1.vue","Руководство по установке Bitrix24 JS SDK в приложениях Vue.",{"title":28,"path":29,"stem":30,"restApiVersion":15,"category":15,"description":31,"badge":15},"Nuxt","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F2.nuxt","Руководство по установке Bitrix24 JS SDK в приложениях Nuxt.",{"title":33,"path":34,"stem":35,"restApiVersion":15,"category":15,"description":36,"badge":15},"React","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Freact","docs\u002F1.getting-started\u002F2.installation\u002F3.react","Руководство по установке Bitrix24 JS SDK в приложениях React.",{"title":38,"path":39,"stem":40,"restApiVersion":15,"category":15,"description":41,"badge":15},"Node.js","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnodejs","docs\u002F1.getting-started\u002F2.installation\u002F4.nodejs","Руководство по установке Bitrix24 JS SDK в приложениях Node.js.",{"title":43,"path":44,"stem":45,"restApiVersion":15,"category":15,"description":46,"badge":15},"UMD","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fumd","docs\u002F1.getting-started\u002F2.installation\u002F5.umd","Руководство по использованию UMD-версии Bitrix24 JS SDK в ваших приложениях.",false,{"title":49,"restApiVersion":15,"category":15,"description":15,"badge":15,"shadow":47,"path":50,"stem":51,"children":52,"page":47},"Migration","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[53,58],{"title":54,"path":55,"stem":56,"restApiVersion":15,"category":15,"description":57,"badge":15},"v0 → v1","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv1","docs\u002F1.getting-started\u002F3.migration\u002F1.v1","Подробное руководство по миграции приложения с Bitrix24 JS SDK v0 на Bitrix24 JS SDK v1.",{"title":59,"path":60,"stem":61,"restApiVersion":15,"category":15,"description":62,"badge":15},"v2 → v3","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv3","docs\u002F1.getting-started\u002F3.migration\u002F2.v3","Как уйти с устаревшей REST-поверхности, которая удаляется в Bitrix24 JS SDK 3.0.0.",{"title":64,"restApiVersion":15,"category":15,"description":15,"badge":15,"path":65,"stem":66,"children":67,"page":47},"AI-инструменты","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[68,73],{"title":69,"path":70,"stem":71,"restApiVersion":15,"category":15,"description":72,"badge":15},"Навыки","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F1.skills","Узкоспециализированные skill-файлы для AI-агентов разработчика, работающих с @bitrix24\u002Fb24jssdk.",{"title":74,"path":75,"stem":76,"restApiVersion":15,"category":15,"description":77,"badge":15},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","Как сделать, чтобы AI-инструменты вроде Cursor, Windsurf, GitHub Copilot, ChatGPT и Claude понимали методы, инструменты и лучшие практики Bitrix24 JS SDK.",{"title":79,"path":80,"stem":81,"children":82,"restApiVersion":15,"category":15,"description":15,"badge":15},"Работа с REST API","\u002Fdocs\u002Fworking-with-the-rest-api","docs\u002F2.working-with-the-rest-api\u002F0.index",[83,86,93,98,103,107,112,116,121,126,130,135,140,145,150,155,160,165,170,175,179,184,189,194,200,205,210,215,220,225,230,235,240,245,251,256,261,267,272,277,282,287,293,299,305,310,315,320,326,331,336,341,346],{"title":84,"path":80,"stem":81,"restApiVersion":15,"category":15,"description":85,"badge":15},"Введение","Обзор возможностей SDK для работы с REST API Bitrix24",{"title":87,"path":88,"stem":89,"restApiVersion":90,"category":91,"description":92,"badge":15},"Call","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F1.call-rest-api-ver2","rest-api-ver2","actions","Метод для вызовов REST API Bitrix24 версии 2.",{"title":87,"path":94,"stem":95,"restApiVersion":96,"category":91,"description":97,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F1.call-rest-api-ver3","rest-api-ver3","Метод для вызовов REST API Bitrix24 версии 3.",{"title":99,"path":100,"stem":101,"restApiVersion":90,"category":91,"description":102,"badge":15},"CallList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F2.call-list-rest-api-ver2","Метод для быстрого получения всех данных из list-методов REST API Bitrix24 версии 2.",{"title":99,"path":104,"stem":105,"restApiVersion":96,"category":91,"description":106,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.call-list-rest-api-ver3","Метод для быстрого получения всех данных из list-методов REST API Bitrix24 версии 3.",{"title":108,"path":109,"stem":110,"restApiVersion":90,"category":91,"description":111,"badge":15},"FetchList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-list-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F2.fetch-list-rest-api-ver2","Возвращает AsyncGenerator, позволяющий обрабатывать данные из list-методов REST API Bitrix24 версии 2 по мере поступления, не загружая весь массив в память сразу. Особенно полезно при работе с очень большими объёмами данных.",{"title":108,"path":113,"stem":114,"restApiVersion":96,"category":91,"description":115,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-list-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.fetch-list-rest-api-ver3","Возвращает AsyncGenerator, позволяющий обрабатывать данные из list-методов REST API Bitrix24 версии 3 по мере поступления, не загружая весь массив в память сразу. Особенно полезно при работе с очень большими объёмами данных.",{"title":117,"path":118,"stem":119,"restApiVersion":15,"category":117,"description":120,"badge":15},"B24Hook","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhook","docs\u002F2.working-with-the-rest-api\u002F20.hook","Серверная точка входа для работы с REST API Bitrix24 через входящий вебхук (постоянный токен).",{"title":122,"path":123,"stem":124,"restApiVersion":90,"category":91,"description":125,"badge":15},"Batch","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F3.batch-rest-api-ver2","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 2. Позволяет выполнить до 50 команд в одном API-вызове.",{"title":122,"path":127,"stem":128,"restApiVersion":96,"category":91,"description":129,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F3.batch-rest-api-ver3","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 3. Позволяет выполнить до 50 команд в одном API-вызове.",{"title":84,"path":131,"stem":132,"restApiVersion":15,"category":133,"description":134,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe","docs\u002F2.working-with-the-rest-api\u002F30.frame","B24Frame","Предназначен для управления приложениями Bitrix24, работающими внутри placement-iframe. Наследуется от AbstractB24 и предоставляет менеджеры для аутентификации, обмена сообщениями с родительским окном, слайдеров, диалогов, placement и опций.",{"title":136,"path":137,"stem":138,"restApiVersion":15,"category":133,"description":139,"badge":15},"Инициализация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-initialize-b24-frame","docs\u002F2.working-with-the-rest-api\u002F30.frame-initialize-b24-frame","Функция предназначена для инициализации B24Frame",{"title":141,"path":142,"stem":143,"restApiVersion":15,"category":133,"description":144,"badge":15},"Авторизация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-auth","docs\u002F2.working-with-the-rest-api\u002F31.frame-auth","Предназначен для управления аутентификацией в приложениях Bitrix24. Обрабатывает данные аутентификации, полученные от родительского окна, и предоставляет методы для их обновления и получения.",{"title":146,"path":147,"stem":148,"restApiVersion":15,"category":133,"description":149,"badge":15},"Диалог","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-dialog","docs\u002F2.working-with-the-rest-api\u002F31.frame-dialog","Оборачивает системные диалоги BX24 (выбор пользователя, выбор прав доступа, выбор CRM-сущности), чтобы их можно было открывать изнутри iframe приложения Bitrix24.",{"title":151,"path":152,"stem":153,"restApiVersion":15,"category":133,"description":154,"badge":15},"Опции","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-options","docs\u002F2.working-with-the-rest-api\u002F31.frame-options","Используется для управления настройками приложения и пользователя в приложении Bitrix24. Позволяет инициализировать данные, получать и устанавливать опции через сообщения родительскому окну.",{"title":156,"path":157,"stem":158,"restApiVersion":15,"category":133,"description":159,"badge":15},"Родительское окно","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-parent","docs\u002F2.working-with-the-rest-api\u002F31.frame-parent","Предоставляет методы для управления родительским окном приложения в Bitrix24, включая изменение размера окна, управление прокруткой, инициацию звонков и открытие мессенджера.",{"title":161,"path":162,"stem":163,"restApiVersion":15,"category":133,"description":164,"badge":15},"Placement","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-placement","docs\u002F2.working-with-the-rest-api\u002F31.frame-placement","Используется для управления placement виджетов в приложении Bitrix24.",{"title":166,"path":167,"stem":168,"restApiVersion":15,"category":133,"description":169,"badge":15},"Слайдер","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-slider","docs\u002F2.working-with-the-rest-api\u002F31.frame-slider","Предоставляет методы для работы со слайдерами в приложении Bitrix24. Позволяет открывать и закрывать слайдеры, а также управлять их содержимым.",{"title":171,"path":172,"stem":173,"restApiVersion":90,"category":91,"description":174,"badge":15},"BatchByChunk","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-by-chunk-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F4.batch-by-chunk-rest-api-ver2","Метод для выполнения пакетных запросов с автоматическим разбиением на чанки для любого числа команд. Автоматически делит большие наборы команд на батчи по 50 и выполняет их последовательно. Используйте только массивы кортежей или массивы объектов.",{"title":171,"path":176,"stem":177,"restApiVersion":96,"category":91,"description":178,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-by-chunk-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F4.batch-by-chunk-rest-api-ver3","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 3 с автоматическим разбиением на чанки для любого числа команд. Автоматически делит большие наборы команд на батчи по 50 и выполняет их последовательно. Используйте только массивы кортежей или массивы объектов.",{"title":180,"path":181,"stem":182,"restApiVersion":15,"category":180,"description":183,"badge":15},"B24OAuth","\u002Fdocs\u002Fworking-with-the-rest-api\u002Foauth","docs\u002F2.working-with-the-rest-api\u002F40.oauth","Серверная точка входа для работы с REST API Bitrix24 по access token OAuth 2.0 (с автоматическим обновлением).",{"title":185,"path":186,"stem":187,"restApiVersion":15,"category":15,"description":188,"badge":15},"Выбор метода","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fchoosing-the-right-method","docs\u002F2.working-with-the-rest-api\u002F5.choosing-the-right-method","Руководство по выбору между Call, CallList, FetchList, Batch и BatchByChunk в REST API v2 и v3.",{"title":190,"path":191,"stem":192,"restApiVersion":15,"category":15,"description":193,"badge":15},"Фильтрация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffiltering","docs\u002F2.working-with-the-rest-api\u002F5.filtering","Справочник по построению параметров фильтра в Bitrix24 REST API v2 (префиксные операторы) и v3 (массив троек), включая формат дат и правило отбрасывания order.",{"title":195,"path":196,"stem":197,"restApiVersion":15,"category":198,"description":199,"badge":15},"B24HelperManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper","docs\u002F2.working-with-the-rest-api\u002F50.helper","Helper","Агрегирующий менеджер, который загружает данные профиля, приложения, оплаты, лицензии, валют и опций одним батч-запросом REST, а также подключает Pull-клиент.",{"title":201,"path":202,"stem":203,"restApiVersion":15,"category":198,"description":204,"badge":15},"useB24Helper","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-use-b24-helper","docs\u002F2.working-with-the-rest-api\u002F51.helper-use-b24-helper","Основанный на замыкании composable, который владеет единственным экземпляром B24HelperManager и предоставляет хелперы жизненного цикла (init \u002F destroy \u002F связка с Pull-клиентом).",{"title":206,"path":207,"stem":208,"restApiVersion":15,"category":198,"description":209,"badge":15},"ProfileManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-profile-manager","docs\u002F2.working-with-the-rest-api\u002F52.helper-profile-manager","Разобранный ответ REST-метода `profile`: id, имя, фамилия, пол, фото, часовой пояс, флаг администратора.",{"title":211,"path":212,"stem":213,"restApiVersion":15,"category":198,"description":214,"badge":15},"AppManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-app-manager","docs\u002F2.working-with-the-rest-api\u002F53.helper-app-manager","Разобранный ответ REST-метода `app.info`: id приложения, код, версия, статус, флаг установки.",{"title":216,"path":217,"stem":218,"restApiVersion":15,"category":198,"description":219,"badge":15},"PaymentManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-payment-manager","docs\u002F2.working-with-the-rest-api\u002F54.helper-payment-manager","Статус оплаты приложения Bitrix24 — извлекается из `app.info`.",{"title":221,"path":222,"stem":223,"restApiVersion":15,"category":198,"description":224,"badge":15},"LicenseManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-license-manager","docs\u002F2.working-with-the-rest-api\u002F55.helper-license-manager","Информация о лицензии Bitrix24 из `app.info` — и автоматическая перенастройка менеджера ограничений под соответствующий тарифный план.",{"title":226,"path":227,"stem":228,"restApiVersion":15,"category":198,"description":229,"badge":15},"CurrencyManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-currency-manager","docs\u002F2.working-with-the-rest-api\u002F56.helper-currency-manager","Каталог валют, кэшируемый в памяти — базовая валюта, форматтеры для каждой валюты и форматтер числа в строку.",{"title":231,"path":232,"stem":233,"restApiVersion":15,"category":198,"description":234,"badge":15},"OptionsManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-options-manager","docs\u002F2.working-with-the-rest-api\u002F57.helper-options-manager","Типизированный доступ к `app.option.get` \u002F `user.option.get`, плюс save(), который батчит `*.option.set` с необязательным Pull-уведомлением.",{"title":236,"path":237,"stem":238,"restApiVersion":15,"category":15,"description":239,"badge":15},"Ошибки","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferrors","docs\u002F2.working-with-the-rest-api\u002F6.errors","Справочник кодов SdkError и AjaxError, выбрасываемых SDK, плюс коды ошибок REST Bitrix24, которые через них проявляются.",{"title":241,"path":242,"stem":243,"restApiVersion":15,"category":241,"description":244,"badge":15},"Pull","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fpull","docs\u002F2.working-with-the-rest-api\u002F60.pull","Поток сообщений в реальном времени от Bitrix24 к вашему приложению — WebSocket как основной канал, long-polling как запасной. Только для фрейма.",{"title":246,"path":247,"stem":248,"restApiVersion":15,"category":249,"description":250,"badge":15},"Logger","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger","docs\u002F2.working-with-the-rest-api\u002F66.logger","logger","Логгер, вдохновлённый PHP Monolog, предоставляет структурированную систему логирования с поддержкой каналов, обработчиков, процессоров и форматтеров. Реализация следует принципам PSR-3 и паттерну цепочки ответственности.",{"title":252,"path":253,"stem":254,"restApiVersion":15,"category":249,"description":255,"badge":15},"Telegram","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger-telegram","docs\u002F2.working-with-the-rest-api\u002F66.logger-telegram","Отправка логов в Telegram",{"title":257,"path":258,"stem":259,"restApiVersion":15,"category":15,"description":260,"badge":15},"Обнаружение v3-методов","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fdiscovering-v3-methods","docs\u002F2.working-with-the-rest-api\u002F7.discovering-v3-methods","Используйте rest.documentation.openapi, чтобы получить собственный машиночитаемый список всех доступных методов REST API v3 портала — источник истины, на который SDK опирается вместо захардкоженного allowlist. Особенно полезно для AI-агентов и кодогенерации.",{"title":262,"path":263,"stem":264,"restApiVersion":15,"category":265,"description":266,"badge":15},"AjaxResult","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-ajax-result","docs\u002F2.working-with-the-rest-api\u002F70.core-ajax-result","Core","Специализированный Result, возвращаемый каждым REST-хелпером. Предоставляет `isMore() \u002F getNext() \u002F getTotal() \u002F getStatus()` для постраничных ответов и неизменяемые данные.",{"title":268,"path":269,"stem":270,"restApiVersion":15,"category":265,"description":271,"badge":15},"Http","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-http","docs\u002F2.working-with-the-rest-api\u002F70.core-http","Низкоуровневый интерфейс транспорта, возвращаемый `b24.getHttpClient(version)`. Прямой доступ к axios-клиентам, параметрам ограничений, статистике и сбросу.",{"title":273,"path":274,"stem":275,"restApiVersion":15,"category":265,"description":276,"badge":15},"B24LangList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-lang-list","docs\u002F2.working-with-the-rest-api\u002F70.core-lang-list","Enum языков интерфейса облачного Bitrix24 плюс карта локалей BCP-47.",{"title":278,"path":279,"stem":280,"restApiVersion":15,"category":265,"description":281,"badge":15},"RequestIdGenerator","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-request-id-generator","docs\u002F2.working-with-the-rest-api\u002F70.core-request-id-generator","Реализация `IRequestIdGenerator` по умолчанию. Генерирует request id в формате UUID v7 и предоставляет имена HTTP-заголовка \u002F query-параметра, используемые SDK.",{"title":283,"path":284,"stem":285,"restApiVersion":15,"category":265,"description":286,"badge":15},"Result","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-result","docs\u002F2.working-with-the-rest-api\u002F70.core-result","Обобщённый результат операции с флагом успеха, данными и картой ошибок. Аналог \\\\Bitrix\\\\Main\\\\Result из Bitrix Framework.",{"title":288,"path":289,"stem":290,"restApiVersion":15,"category":291,"description":292,"badge":15},"Лимитеры","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flimiters","docs\u002F2.working-with-the-rest-api\u002F77.limiters","limiters","Система ограничений предоставляет комплексный механизм управления частотой запросов, временем выполнения операций и адаптивными задержками.",{"title":294,"path":295,"stem":296,"restApiVersion":15,"category":297,"description":298,"badge":15},"Логирование и редактирование","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogging","docs\u002F2.working-with-the-rest-api\u002F78.logging","logging","Что SDK редактирует автоматически до того, как информация о запросе попадёт в логгер или AjaxError, что он не редактирует, и как подключить кастомный логгер через setLogger(...) без повторного появления утечек учётных данных.",{"title":300,"path":301,"stem":302,"restApiVersion":15,"category":303,"description":304,"badge":15},"Browser","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-browser","docs\u002F2.working-with-the-rest-api\u002F80.tools-browser","tools","Дешёвый детектор user-agent \u002F платформы \u002F возможностей. Полезен для runtime-ветвлений во фронтенд-коде.",{"title":306,"path":307,"stem":308,"restApiVersion":15,"category":303,"description":309,"badge":15},"Text","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-text","docs\u002F2.working-with-the-rest-api\u002F80.tools-text","Утилиты для текста и дат — UUID v4 \u002F v7, кодирование \u002F декодирование HTML-сущностей, преобразования типов, хелперы регистра, `toDateTime` \u002F `toB24Format` на Luxon, форматирование чисел и конструктор query-строки.",{"title":311,"path":312,"stem":313,"restApiVersion":15,"category":303,"description":314,"badge":15},"Type","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-type","docs\u002F2.working-with-the-rest-api\u002F80.tools-type","Runtime type guards — строки, числа, обычные объекты, массивы, DOM-узлы, Blob, FormData, формы JSON-RPC сообщений.",{"title":316,"path":317,"stem":318,"restApiVersion":15,"category":303,"description":319,"badge":15},"useFormatter","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-use-formatters","docs\u002F2.working-with-the-rest-api\u002F80.tools-use-formatters","Composable, возвращающий общие экземпляры `FormatterNumbers` и `FormatterIban`, преднастроенные спецификациями стран.",{"title":321,"path":322,"stem":323,"restApiVersion":15,"category":324,"description":325,"badge":15},"IResult","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-iresult","docs\u002F2.working-with-the-rest-api\u002F90.types-iresult","Types","Обобщённый интерфейс результата операции. Реализуется `Result\u003CT>` и (транзитивно) `AjaxResult\u003CT>`.",{"title":327,"path":328,"stem":329,"restApiVersion":15,"category":324,"description":330,"badge":15},"TypeB24","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-type-b24","docs\u002F2.working-with-the-rest-api\u002F90.types-type-b24","Публичный контракт, реализуемый каждым классом-точкой входа (B24Frame, B24Hook, B24OAuth). Единый источник истины для поверхности SDK.",{"title":332,"path":333,"stem":334,"restApiVersion":15,"category":265,"description":335,"badge":15},"Телеметрия","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftelemetry","docs\u002F2.working-with-the-rest-api\u002F95.telemetry","Query-параметры request id, версии SDK и типа SDK, добавляемые к каждому REST-вызову Bitrix24.",{"title":337,"path":338,"stem":339,"restApiVersion":15,"category":265,"description":340,"badge":15},"Коды ошибок","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferror-codes","docs\u002F2.working-with-the-rest-api\u002F96.error-codes","Каталог кодов ошибок, которые распознаёт SDK — разделённых на «hard» (выбрасываются) и «soft» (возвращаются как AjaxError внутри AjaxResult).",{"title":342,"path":343,"stem":344,"restApiVersion":15,"category":303,"description":345,"badge":15},"HealthCheck","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-health-check","docs\u002F2.working-with-the-rest-api\u002Ftools-health-check","Метод для проверки доступности REST API Bitrix24. Выполняет простой запрос к REST API для проверки работоспособности сервиса.",{"title":347,"path":348,"stem":349,"restApiVersion":15,"category":303,"description":350,"badge":15},"Ping","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-ping","docs\u002F2.working-with-the-rest-api\u002Ftools-ping","Метод для измерения скорости ответа REST API Bitrix24. Выполняет тестовый запрос и возвращает время ответа в миллисекундах.",{"title":352,"path":353,"stem":354,"children":355,"restApiVersion":15,"category":15,"description":15,"badge":15},"Примеры","\u002Fdocs\u002Fexamples","docs\u002F99.examples\u002F0.index",[356,358,364,369,374,379,384,389,394,399,404,409,414,419,424,429,434,439,444,449,454],{"title":84,"path":353,"stem":354,"restApiVersion":15,"category":15,"description":357,"badge":15},"Рецепты, сочетающие SDK с реалистичными сценариями — аналитика CRM, массовые рассылки, AI-ассистенты, установка по OAuth и не только. Каждый рецепт — отдельный файл, удобный для копирования.",{"title":359,"path":360,"stem":361,"restApiVersion":15,"category":362,"description":363,"badge":15},"Аналитика CRM","\u002Fdocs\u002Fexamples\u002Fcrm-analytics","docs\u002F99.examples\u002F1.crm-analytics","examples","Стримит все сделки через actions.v2.fetchList.make, группирует по стадиям, печатает отчёт по воронке (количество, конверсия %, средний чек, win rate).",{"title":365,"path":366,"stem":367,"restApiVersion":15,"category":362,"description":368,"badge":15},"Сделки → CSV","\u002Fdocs\u002Fexamples\u002Fdashboard-deals-csv","docs\u002F99.examples\u002F1.dashboard-deals-csv","Стримит каждую сделку CRM, подходящую под фильтр по дате, в CSV-файл через вебхук и FetchListV2.",{"title":370,"path":371,"stem":372,"restApiVersion":15,"category":15,"description":373,"badge":15},"Список сущностей","\u002Fdocs\u002Fexamples\u002Fentity-list","docs\u002F99.examples\u002F10.entity-list","Рендерит постраничный список сущностей Bitrix24 с компонентами B24UI и SDK-действием callList.",{"title":375,"path":376,"stem":377,"restApiVersion":15,"category":362,"description":378,"badge":15},"Обработка ошибок","\u002Fdocs\u002Fexamples\u002Ferror-handling","docs\u002F99.examples\u002F10.error-handling","Демонстрирует четыре слоя ошибок (SdkError \u002F AjaxError \u002F сетевые \u002F soft) и настройки hardErrorCodes \u002F softErrorCodes \u002F retryOnNetworkError у менеджера ограничений.",{"title":380,"path":381,"stem":382,"restApiVersion":15,"category":362,"description":383,"badge":15},"Регистрация событий","\u002Fdocs\u002Fexamples\u002Fevent-registration","docs\u002F99.examples\u002F11.event-registration","CLI-инструмент — список, привязка и отвязка исходящих событий вебхуков Bitrix24 через event.get \u002F event.bind \u002F event.unbind. В паре с рецептом обработчика вебхуков.",{"title":385,"path":386,"stem":387,"restApiVersion":15,"category":362,"description":388,"badge":15},"Установка OAuth","\u002Fdocs\u002Fexamples\u002Foauth-install","docs\u002F99.examples\u002F12.oauth-install","Express-сервер, который обрабатывает события ONAPPINSTALL \u002F ONAPPUPDATE \u002F ONAPPUNINSTALL для маркетплейс-приложения Bitrix24, сохраняет токены по порталам и создаёт клиент B24OAuth по требованию с callback обновления, подключённым к хранилищу.",{"title":390,"path":391,"stem":392,"restApiVersion":15,"category":362,"description":393,"badge":15},"Скелет frame-приложения","\u002Fdocs\u002Fexamples\u002Fframe-app-skeleton","docs\u002F99.examples\u002F2.frame-app-skeleton","Минимально жизнеспособное iframe-приложение Bitrix24: рукопожатие init, установка заголовка, сохранение состояния приложения, открытие слайдера, чистое закрытие.",{"title":395,"path":396,"stem":397,"restApiVersion":15,"category":362,"description":398,"badge":15},"Массовые рассылки","\u002Fdocs\u002Fexamples\u002Fmass-messaging","docs\u002F99.examples\u002F2.mass-messaging","Фильтрует контакты в CRM, персонализирует шаблон, отправляет IM-уведомления ответственным менеджерам.",{"title":400,"path":401,"stem":402,"restApiVersion":15,"category":15,"description":403,"badge":15},"Мастер установки","\u002Fdocs\u002Fexamples\u002Fapp-installation-wizard","docs\u002F99.examples\u002F20.app-installation-wizard","Многошаговый процесс установки, который создаёт пользовательские поля, регистрирует placement-ы, финализирует установку и празднует конфетти.",{"title":405,"path":406,"stem":407,"restApiVersion":15,"category":362,"description":408,"badge":15},"Автоматизация задач","\u002Fdocs\u002Fexamples\u002Ftask-automation","docs\u002F99.examples\u002F3.task-automation","Опрашивает стадии сделок каждые 60 с. При отслеживаемом переходе создаёт задачу с описанием, дедлайном и приоритетом.",{"title":410,"path":411,"stem":412,"restApiVersion":15,"category":362,"description":413,"badge":15},"Вебхук CLI","\u002Fdocs\u002Fexamples\u002Fwebhook-cli-node","docs\u002F99.examples\u002F3.webhook-cli-node","Node-скрипт на 30 строк, который аутентифицируется на портале Bitrix24 через входящий вебхук и печатает вызывающего пользователя — полезно как первое, что вы запускаете после создания вебхука.",{"title":415,"path":416,"stem":417,"restApiVersion":15,"category":15,"description":418,"badge":15},"Экспорт Node + Hook","\u002Fdocs\u002Fexamples\u002Fnode-hook-company-export","docs\u002F99.examples\u002F30.node-hook-company-export","Экспорт компаний Bitrix24 в CSV-файл из чистого Node.js-скрипта через B24Hook.",{"title":420,"path":421,"stem":422,"restApiVersion":15,"category":362,"description":423,"badge":15},"Массовое обновление","\u002Fdocs\u002Fexamples\u002Fbulk-update-deals","docs\u002F99.examples\u002F4.bulk-update-deals","Переносит тысячи сделок CRM на новую стадию через BatchByChunkV2 — автоматическое разбиение на чанки, обработка частичных ошибок и одна строка прогресса.",{"title":425,"path":426,"stem":427,"restApiVersion":15,"category":362,"description":428,"badge":15},"Синхронизация ERP","\u002Fdocs\u002Fexamples\u002Ferp-sync","docs\u002F99.examples\u002F4.erp-sync","Двусторонняя синхронизация контактов между Bitrix24 и внешней ERP. Сопоставление по ИНН (основное) или email (запасное). Cron каждый час.",{"title":430,"path":431,"stem":432,"restApiVersion":15,"category":362,"description":433,"badge":15},"Файлы Диска","\u002Fdocs\u002Fexamples\u002Fdisk-files","docs\u002F99.examples\u002F5.disk-files","Список хранилищ и содержимого папок, создание подпапок, просмотр файлов. Загрузка файлов (multipart) намеренно вне области.",{"title":435,"path":436,"stem":437,"restApiVersion":15,"category":362,"description":438,"badge":15},"Подписка на Pull","\u002Fdocs\u002Fexamples\u002Fpull-subscribe-frame","docs\u002F99.examples\u002F5.pull-subscribe-frame","Открыть живой канал из frame-приложения Bitrix24 и реагировать на push-события через useB24Helper + Pull-клиент.",{"title":440,"path":441,"stem":442,"restApiVersion":15,"category":362,"description":443,"badge":15},"Telegram-бот","\u002Fdocs\u002Fexamples\u002Ftelegram-bot","docs\u002F99.examples\u002F6.telegram-bot","Опрашивает новые сделки CRM каждые две минуты; уведомляет Telegram-чат HTML-карточкой.",{"title":445,"path":446,"stem":447,"restApiVersion":15,"category":362,"description":448,"badge":15},"Обработчик вебхуков","\u002Fdocs\u002Fexamples\u002Fwebhook-handler","docs\u002F99.examples\u002F7.webhook-handler","Express-сервер, который принимает исходящие события Bitrix24, подгружает детали через REST, маршрутизирует по имени события. Всегда возвращает 200.",{"title":450,"path":451,"stem":452,"restApiVersion":15,"category":362,"description":453,"badge":15},"AI-ассистент","\u002Fdocs\u002Fexamples\u002Fai-assistant","docs\u002F99.examples\u002F8.ai-assistant","Загружает сделку и её дела, спрашивает у GPT-4o лучшее следующее действие, создаёт задачу, привязанную к сделке, с приоритетом и дедлайном.",{"title":455,"path":456,"stem":457,"restApiVersion":15,"category":362,"description":458,"badge":15},"Веб-поиск + LLM","\u002Fdocs\u002Fexamples\u002Fweb-search-llm","docs\u002F99.examples\u002F9.web-search-llm","Двухшаговый RAG: запрос к любому провайдеру веб-поиска, прогон результата через ваш LLM с цитатами [N], публикация ответа комментарием в таймлайн CRM на сделке.",{"id":460,"title":311,"audited":461,"badge":15,"body":462,"category":303,"description":314,"extension":2581,"links":2582,"meta":2586,"navigation":2587,"path":312,"restApiVersion":15,"seo":2588,"stem":313,"__hash__":2589},"docs\u002Fdocs\u002F2.working-with-the-rest-api\u002F80.tools-type.md","2026-07-01",{"type":463,"value":464,"toc":2564},"minimark",[465,470,504,677,680,778,782,786,834,837,901,904,1057,1060,1134,1137,1187,1191,1246,1249,1307,1310,1359,1363,1505,1508,1535,1537,1540,1843,1848,2011,2014,2222,2227,2429,2433,2560],[466,467,469],"h2",{"id":468},"overview","Обзор",[471,472,473,483,484,487,488,491,492,495,496,499,500,503],"p",{},[474,475,479],"code",{"className":476,"language":477,"style":478},"language-ts-type shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ts-type","",[480,481,311],"span",{"class":482},"sBMFI"," — это синглтон (",[474,485,486],{},"new TypeManager()","), экспортируемый из ",[474,489,490],{},"@bitrix24\u002Fb24jssdk",". Каждый метод (кроме ",[474,493,494],{},"getTag"," и ",[474,497,498],{},"clone",") — это type guard TypeScript, поэтому вы можете использовать его в цепочках ",[474,501,502],{},"if",", и компилятор сузит тип значения:",[505,506,510],"pre",{"className":507,"code":508,"language":509,"meta":478,"style":478},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Type } from '@bitrix24\u002Fb24jssdk'\n\nfunction process(value: unknown) {\n  if (Type.isStringFilled(value)) {\n    \u002F\u002F value: string\n    return value.trim()\n  }\n  if (Type.isPlainObject(value)) {\n    \u002F\u002F value: Record\u003Cstring | number, any>\n  }\n}\n","ts",[474,511,512,543,550,580,608,615,632,638,660,666,671],{"__ignoreMap":478},[480,513,516,520,524,528,531,534,537,540],{"class":514,"line":515},"line",1,[480,517,519],{"class":518},"s7zQu","import",[480,521,523],{"class":522},"sMK4o"," {",[480,525,527],{"class":526},"sTEyZ"," Type",[480,529,530],{"class":522}," }",[480,532,533],{"class":518}," from",[480,535,536],{"class":522}," '",[480,538,490],{"class":539},"sfazB",[480,541,542],{"class":522},"'\n",[480,544,546],{"class":514,"line":545},2,[480,547,549],{"emptyLinePlaceholder":548},true,"\n",[480,551,553,557,561,564,568,571,574,577],{"class":514,"line":552},3,[480,554,556],{"class":555},"spNyl","function",[480,558,560],{"class":559},"s2Zo4"," process",[480,562,563],{"class":522},"(",[480,565,567],{"class":566},"sHdIc","value",[480,569,570],{"class":522},":",[480,572,573],{"class":482}," unknown",[480,575,576],{"class":522},")",[480,578,579],{"class":522}," {\n",[480,581,583,586,590,592,595,598,600,602,605],{"class":514,"line":582},4,[480,584,585],{"class":518},"  if",[480,587,589],{"class":588},"swJcz"," (",[480,591,311],{"class":526},[480,593,594],{"class":522},".",[480,596,597],{"class":559},"isStringFilled",[480,599,563],{"class":588},[480,601,567],{"class":526},[480,603,604],{"class":588},")) ",[480,606,607],{"class":522},"{\n",[480,609,611],{"class":514,"line":610},5,[480,612,614],{"class":613},"sHwdD","    \u002F\u002F value: string\n",[480,616,618,621,624,626,629],{"class":514,"line":617},6,[480,619,620],{"class":518},"    return",[480,622,623],{"class":526}," value",[480,625,594],{"class":522},[480,627,628],{"class":559},"trim",[480,630,631],{"class":588},"()\n",[480,633,635],{"class":514,"line":634},7,[480,636,637],{"class":522},"  }\n",[480,639,641,643,645,647,649,652,654,656,658],{"class":514,"line":640},8,[480,642,585],{"class":518},[480,644,589],{"class":588},[480,646,311],{"class":526},[480,648,594],{"class":522},[480,650,651],{"class":559},"isPlainObject",[480,653,563],{"class":588},[480,655,567],{"class":526},[480,657,604],{"class":588},[480,659,607],{"class":522},[480,661,663],{"class":514,"line":662},9,[480,664,665],{"class":613},"    \u002F\u002F value: Record\u003Cstring | number, any>\n",[480,667,669],{"class":514,"line":668},10,[480,670,637],{"class":522},[480,672,674],{"class":514,"line":673},11,[480,675,676],{"class":522},"}\n",[471,678,679],{},"Проверки сгруппированы по виду значения, которое они проверяют:",[681,682,683,691,697,727,736,742,757,763],"ul",{},[684,685,686,690],"li",{},[687,688,689],"strong",{},"Строки"," — проверки на непустую строку.",[684,692,693,696],{},[687,694,695],{},"Числа \u002F булевы"," — число, целое, дробное, булево.",[684,698,699,702,703,706,707,706,710,706,713,716,717,720,721,706,724,594],{},[687,700,701],{},"Объекты \u002F функции"," — обычные объекты, функции, ",[474,704,705],{},"Map"," \u002F ",[474,708,709],{},"Set",[474,711,712],{},"WeakMap",[474,714,715],{},"WeakSet",", ",[474,718,719],{},"RegExp",", прототипы, ",[474,722,723],{},"null",[474,725,726],{},"undefined",[684,728,729,732,733,594],{},[687,730,731],{},"Массивы"," — массивы, array-like значения, типизированные массивы, ",[474,734,735],{},"ArrayBuffer",[684,737,738,741],{},[687,739,740],{},"DOM"," — узлы, узлы-элементы, текстовые узлы.",[684,743,744,747,748,716,751,716,754,594],{},[687,745,746],{},"Файлы"," — ",[474,749,750],{},"Blob",[474,752,753],{},"File",[474,755,756],{},"FormData",[684,758,759,762],{},[687,760,761],{},"JSON-RPC"," — формы сообщений request \u002F response.",[684,764,765,747,768,770,771,774,775,777],{},[687,766,767],{},"Прочее",[474,769,494],{}," (сырой тег ",[474,772,773],{},"[[Class]]",") и ",[474,776,498],{}," (глубокое клонирование).",[466,779,781],{"id":780},"method-signature","Сигнатура методов",[783,784,689],"h3",{"id":785},"strings",[787,788,789,802],"table",{},[790,791,792],"thead",{},[793,794,795,799],"tr",{},[796,797,798],"th",{},"Метод",[796,800,801],{},"Предикат",[803,804,805,822],"tbody",{},[793,806,807,813],{},[808,809,810],"td",{},[474,811,812],{},"isString(value)",[808,814,815,818,819,594],{},[474,816,817],{},"typeof value === 'string'"," или ",[474,820,821],{},"value instanceof String",[793,823,824,829],{},[808,825,826],{},[474,827,828],{},"isStringFilled(value)",[808,830,831,594],{},[474,832,833],{},"isString(value) && value !== ''",[783,835,695],{"id":836},"numbers-booleans",[787,838,839,847],{},[790,840,841],{},[793,842,843,845],{},[796,844,798],{},[796,846,801],{},[803,848,849,865,877,889],{},[793,850,851,856],{},[808,852,853],{},[474,854,855],{},"isNumber(value)",[808,857,858,861,862,594],{},[474,859,860],{},"typeof value === 'number'"," и не ",[474,863,864],{},"NaN",[793,866,867,872],{},[808,868,869],{},[474,870,871],{},"isInteger(value)",[808,873,874,594],{},[474,875,876],{},"Number.isInteger(value)",[793,878,879,884],{},[808,880,881],{},[474,882,883],{},"isFloat(value)",[808,885,886,594],{},[474,887,888],{},"isNumber && !isInteger",[793,890,891,896],{},[808,892,893],{},[474,894,895],{},"isBoolean(value)",[808,897,898,594],{},[474,899,900],{},"value === true || value === false",[783,902,701],{"id":903},"objects-functions",[787,905,906,914],{},[790,907,908],{},[793,909,910,912],{},[796,911,798],{},[796,913,801],{},[803,915,916,933,948,965,982,995,1020,1032,1044],{},[793,917,918,923],{},[808,919,920],{},[474,921,922],{},"isFunction(value)",[808,924,925,928,929,932],{},[474,926,927],{},"typeof value === 'function'"," (а также экземпляры ",[474,930,931],{},"Function",").",[793,934,935,940],{},[808,936,937],{},[474,938,939],{},"isObject(value)",[808,941,942,945,946,932],{},[474,943,944],{},"typeof === 'object' || 'function'"," (и не ",[474,947,723],{},[793,949,950,955],{},[808,951,952],{},[474,953,954],{},"isObjectLike\u003CT>(value)",[808,956,957,958,961,962,964],{},"только ",[474,959,960],{},"typeof === 'object'"," (также истинно для объектов, не равных ",[474,963,723],{},", включая массивы).",[793,966,967,972],{},[808,968,969],{},[474,970,971],{},"isPlainObject(value)",[808,973,974,975,747,978,981],{},"Истина для объектов, чей ",[474,976,977],{},"constructor",[474,979,980],{},"Object"," (ложь для массивов, экземпляров классов, DOM-узлов).",[793,983,984,989],{},[808,985,986],{},[474,987,988],{},"isPrototype(value)",[808,990,991,992,594],{},"Истина для объектов ",[474,993,994],{},"prototype",[793,996,997,1014],{},[808,998,999,716,1002,716,1005,716,1008,716,1011],{},[474,1000,1001],{},"isMap",[474,1003,1004],{},"isSet",[474,1006,1007],{},"isWeakMap",[474,1009,1010],{},"isWeakSet",[474,1012,1013],{},"isRegExp",[808,1015,1016,1017,932],{},"Проверки по тегу (",[474,1018,1019],{},"Object.prototype.toString.call(value)",[793,1021,1022,1027],{},[808,1023,1024],{},[474,1025,1026],{},"isDate(value)",[808,1028,1029,594],{},[474,1030,1031],{},"value instanceof Date",[793,1033,1034,1039],{},[808,1035,1036],{},[474,1037,1038],{},"isNil(value)",[808,1040,1041,594],{},[474,1042,1043],{},"value === null || value === undefined",[793,1045,1046,1054],{},[808,1047,1048,706,1051],{},[474,1049,1050],{},"isNull",[474,1052,1053],{},"isUndefined",[808,1055,1056],{},"Очевидно из названия.",[783,1058,731],{"id":1059},"arrays",[787,1061,1062,1070],{},[790,1063,1064],{},[793,1065,1066,1068],{},[796,1067,798],{},[796,1069,801],{},[803,1071,1072,1084,1096,1110,1120],{},[793,1073,1074,1079],{},[808,1075,1076],{},[474,1077,1078],{},"isArray(value)",[808,1080,1081,594],{},[474,1082,1083],{},"Array.isArray",[793,1085,1086,1091],{},[808,1087,1088],{},[474,1089,1090],{},"isArrayFilled(value)",[808,1092,1093,594],{},[474,1094,1095],{},"isArray && value.length > 0",[793,1097,1098,1103],{},[808,1099,1100],{},[474,1101,1102],{},"isArrayLike(value)",[808,1104,1105,1106,1109],{},"Имеет числовой ",[474,1107,1108],{},"length"," и не является функцией — также соответствует строкам.",[793,1111,1112,1117],{},[808,1113,1114],{},[474,1115,1116],{},"isArrayBuffer(value)",[808,1118,1119],{},"Проверка по тегу.",[793,1121,1122,1127],{},[808,1123,1124],{},[474,1125,1126],{},"isTypedArray(value)",[808,1128,1129,1130,1133],{},"Соответствует ",[474,1131,1132],{},"Int8Array \u002F Uint8Array \u002F Uint8ClampedArray \u002F Int16Array \u002F Uint16Array \u002F Int32Array \u002F Uint32Array \u002F Float32Array \u002F Float64Array"," (проверка по тегу).",[783,1135,740],{"id":1136},"dom",[787,1138,1139,1147],{},[790,1140,1141],{},[793,1142,1143,1145],{},[796,1144,798],{},[796,1146,801],{},[803,1148,1149,1163,1175],{},[793,1150,1151,1156],{},[808,1152,1153],{},[474,1154,1155],{},"isDomNode(value)",[808,1157,1158,1159,1162],{},"Имеет ",[474,1160,1161],{},"nodeType"," и не является обычным объектом.",[793,1164,1165,1170],{},[808,1166,1167],{},[474,1168,1169],{},"isElementNode(value)",[808,1171,1172,594],{},[474,1173,1174],{},"nodeType === Node.ELEMENT_NODE",[793,1176,1177,1182],{},[808,1178,1179],{},[474,1180,1181],{},"isTextNode(value)",[808,1183,1184,594],{},[474,1185,1186],{},"nodeType === Node.TEXT_NODE",[783,1188,1190],{"id":1189},"files-blobs-formdata","Файлы \u002F Blob \u002F FormData",[787,1192,1193,1201],{},[790,1194,1195],{},[793,1196,1197,1199],{},[796,1198,798],{},[796,1200,801],{},[803,1202,1203,1221,1233],{},[793,1204,1205,1210],{},[808,1206,1207],{},[474,1208,1209],{},"isBlob(value)",[808,1211,1158,1212,716,1215,716,1218,594],{},[474,1213,1214],{},"size: number",[474,1216,1217],{},"type: string",[474,1219,1220],{},"slice: Function",[793,1222,1223,1228],{},[808,1224,1225],{},[474,1226,1227],{},"isFile(value)",[808,1229,1230,594],{},[474,1231,1232],{},"isBlob && name: string && (lastModified || lastModifiedDate)",[793,1234,1235,1240],{},[808,1236,1237],{},[474,1238,1239],{},"isFormData(value)",[808,1241,1242,1245],{},[474,1243,1244],{},"instanceof FormData"," (когда глобал доступен) или проверка по тегу.",[783,1247,761],{"id":1248},"json-rpc",[787,1250,1251,1259],{},[790,1252,1253],{},[793,1254,1255,1257],{},[796,1256,798],{},[796,1258,801],{},[803,1260,1261,1282],{},[793,1262,1263,1268],{},[808,1264,1265],{},[474,1266,1267],{},"isJsonRpcRequest(value)",[808,1269,1158,1270,1273,1274,1277,1278,1281],{},[474,1271,1272],{},"jsonrpc"," (непустой) и ",[474,1275,1276],{},"method"," (непустой). Тип возврата — ",[474,1279,1280],{},"boolean",", а не type guard.",[793,1283,1284,1289],{},[808,1285,1286],{},[474,1287,1288],{},"isJsonRpcResponse(value)",[808,1290,1158,1291,716,1293,1296,1297,1300,1301,1304,1305,1281],{},[474,1292,1272],{},[474,1294,1295],{},"id"," и либо ",[474,1298,1299],{},"result",", либо ",[474,1302,1303],{},"error",". Тип возврата — ",[474,1306,1280],{},[783,1308,767],{"id":1309},"other",[505,1311,1313],{"className":476,"code":1312,"language":477,"meta":478,"style":478},"getTag(value: any): string                          \u002F\u002F Object.prototype.toString.call(value)\nclone(obj: any, bCopyObj?: boolean): any             \u002F\u002F глубокое клонирование; bCopyObj по умолчанию true\n",[474,1314,1315,1337],{"__ignoreMap":478},[480,1316,1317,1319,1321,1323,1325,1328,1331,1334],{"class":514,"line":515},[480,1318,494],{"class":482},[480,1320,563],{"class":522},[480,1322,567],{"class":566},[480,1324,570],{"class":522},[480,1326,1327],{"class":482}," any",[480,1329,1330],{"class":522},"):",[480,1332,1333],{"class":482}," string",[480,1335,1336],{"class":613},"                          \u002F\u002F Object.prototype.toString.call(value)\n",[480,1338,1339,1341,1344,1347,1350,1353,1356],{"class":514,"line":545},[480,1340,498],{"class":559},[480,1342,1343],{"class":526},"(obj: any",[480,1345,1346],{"class":522},",",[480,1348,1349],{"class":526}," bCopyObj",[480,1351,1352],{"class":522},"?:",[480,1354,1355],{"class":526}," boolean): any             ",[480,1357,1358],{"class":613},"\u002F\u002F глубокое клонирование; bCopyObj по умолчанию true\n",[466,1360,1362],{"id":1361},"key-concepts","Ключевые понятия",[681,1364,1365,1392,1424,1447,1470],{},[684,1366,1367,1379,1380,1383,1384,1386,1387,1389,1390,594],{},[687,1368,1369,706,1372,1375,1376,1378],{},[474,1370,1371],{},"isJsonRpcRequest",[474,1373,1374],{},"isJsonRpcResponse"," — это обычные предикаты ",[474,1377,1280],{},", а не type guards."," Каждый другой метод этого класса сужает через ",[474,1381,1382],{},"value is X","; эти два намеренно (или нет) возвращают ",[474,1385,1280],{},", поэтому использование их в ",[474,1388,502],{}," не сужает тип ",[474,1391,567],{},[684,1393,1394,1403,1404,1407,1408,1411,1412,716,1414,1417,1418,1420,1421,594],{},[687,1395,1396,1399,1400,594],{},[474,1397,1398],{},"isObjectLike\u003CT>"," сужает к переданному вызывающим кодом дженерику, а не к ",[474,1401,1402],{},"object"," Он лишь проверяет ",[474,1405,1406],{},"typeof value === 'object' && value !== null","; переданный вами ",[474,1409,1410],{},"T"," не проверяется в runtime — массивы, ",[474,1413,705],{},[474,1415,1416],{},"Date"," и DOM-узлы все проходят. ",[474,1419,651],{}," — более строгая проверка, когда вам конкретно нужен объект в стиле ",[474,1422,1423],{},"{}",[684,1425,1426,1432,1433,1435,1436,747,1439,1442,1443,1446],{},[687,1427,1428,1431],{},[474,1429,1430],{},"isArrayLike"," также соответствует строкам."," У строк есть числовой ",[474,1434,1108],{},", и они не функции, поэтому ",[474,1437,1438],{},"Type.isArrayLike('abc')",[474,1440,1441],{},"true",". Используйте ",[474,1444,1445],{},"isArray",", когда нужен настоящий массив.",[684,1448,1449,1455,1456,706,1459,1462,1463,1466,1467,594],{},[687,1450,1451,1454],{},[474,1452,1453],{},"isDomNode"," требует реального DOM-глобала."," ",[474,1457,1458],{},"isElementNode",[474,1460,1461],{},"isTextNode"," разыменовывают глобальную константу ",[474,1464,1465],{},"Node",", поэтому работают только в браузерном (или JSDOM) окружении — их вызов в чистом Node.js без DOM-шима выбрасывает ",[474,1468,1469],{},"ReferenceError",[684,1471,1472,1477,1478,1481,1482,1485,1486,1488,1489,1492,1493,1496,1497,1500,1501,1504],{},[687,1473,1474,1476],{},[474,1475,498],{}," ничего не мутирует в источнике, но клонирует только распознаваемые им формы обычных данных."," Массивы и обычные объекты копируются ключ за ключом (рекурсивно, если ",[474,1479,1480],{},"bCopyObj"," не ",[474,1483,1484],{},"false","), ",[474,1487,1416],{}," пересобирается через ",[474,1490,1491],{},"new Date(obj)",", а DOM-узлы проходят через ",[474,1494,1495],{},"Node.cloneNode(bCopyObj)",". Всё остальное с ",[474,1498,1499],{},"typeof obj === 'object'"," попадает в общую ветку и пересобирается через ",[474,1502,1503],{},"new obj.constructor()",", поэтому кастомные классы с обязательными аргументами конструктора могут выбросить исключение.",[466,1506,375],{"id":1507},"error-handling",[471,1509,1510,1511,818,1513,1515,1516,1518,1519,706,1521,1462,1523,1525,1526,1528,1529,1531,1532,1534],{},"Методы-проверки никогда не выбрасывают исключений для проверяемого значения — не совпавшее, ",[474,1512,723],{},[474,1514,726],{}," значение просто даёт ",[474,1517,1484],{},". Исключения зависят от окружения: ",[474,1520,1458],{},[474,1522,1461],{},[474,1524,1465],{}," и выбрасывают ",[474,1527,1469],{}," вне DOM-окружения, а ",[474,1530,498],{}," может выбросить, когда откатывается к ",[474,1533,1503],{}," для класса, требующего аргументов конструктора. Оборачивайте такие вызовы при работе на сервере или при клонировании произвольных экземпляров классов.",[466,1536,352],{"id":362},[471,1538,1539],{},"Сужение через проверки строк и объектов:",[505,1541,1543],{"className":507,"code":1542,"language":509,"meta":478,"style":478},"import { Type } from '@bitrix24\u002Fb24jssdk'\n\nfunction describe(value: unknown): string {\n  if (Type.isStringFilled(value)) {\n    return `string: ${value.trim()}`\n  }\n  if (Type.isPlainObject(value)) {\n    return `object with ${Object.keys(value).length} keys`\n  }\n  if (Type.isArrayFilled(value)) {\n    return `array with ${value.length} items`\n  }\n  return 'unknown'\n}\n\ndescribe('  hi  ') \u002F\u002F 'string: hi'\ndescribe({ a: 1 }) \u002F\u002F 'object with 1 keys'\ndescribe([1, 2, 3]) \u002F\u002F 'array with 3 items'\n",[474,1544,1545,1563,1567,1588,1608,1633,1637,1657,1691,1695,1716,1740,1745,1758,1763,1768,1790,1816],{"__ignoreMap":478},[480,1546,1547,1549,1551,1553,1555,1557,1559,1561],{"class":514,"line":515},[480,1548,519],{"class":518},[480,1550,523],{"class":522},[480,1552,527],{"class":526},[480,1554,530],{"class":522},[480,1556,533],{"class":518},[480,1558,536],{"class":522},[480,1560,490],{"class":539},[480,1562,542],{"class":522},[480,1564,1565],{"class":514,"line":545},[480,1566,549],{"emptyLinePlaceholder":548},[480,1568,1569,1571,1574,1576,1578,1580,1582,1584,1586],{"class":514,"line":552},[480,1570,556],{"class":555},[480,1572,1573],{"class":559}," describe",[480,1575,563],{"class":522},[480,1577,567],{"class":566},[480,1579,570],{"class":522},[480,1581,573],{"class":482},[480,1583,1330],{"class":522},[480,1585,1333],{"class":482},[480,1587,579],{"class":522},[480,1589,1590,1592,1594,1596,1598,1600,1602,1604,1606],{"class":514,"line":582},[480,1591,585],{"class":518},[480,1593,589],{"class":588},[480,1595,311],{"class":526},[480,1597,594],{"class":522},[480,1599,597],{"class":559},[480,1601,563],{"class":588},[480,1603,567],{"class":526},[480,1605,604],{"class":588},[480,1607,607],{"class":522},[480,1609,1610,1612,1615,1618,1621,1623,1625,1627,1630],{"class":514,"line":610},[480,1611,620],{"class":518},[480,1613,1614],{"class":522}," `",[480,1616,1617],{"class":539},"string: ",[480,1619,1620],{"class":522},"${",[480,1622,567],{"class":526},[480,1624,594],{"class":522},[480,1626,628],{"class":559},[480,1628,1629],{"class":526},"()",[480,1631,1632],{"class":522},"}`\n",[480,1634,1635],{"class":514,"line":617},[480,1636,637],{"class":522},[480,1638,1639,1641,1643,1645,1647,1649,1651,1653,1655],{"class":514,"line":634},[480,1640,585],{"class":518},[480,1642,589],{"class":588},[480,1644,311],{"class":526},[480,1646,594],{"class":522},[480,1648,651],{"class":559},[480,1650,563],{"class":588},[480,1652,567],{"class":526},[480,1654,604],{"class":588},[480,1656,607],{"class":522},[480,1658,1659,1661,1663,1666,1668,1670,1672,1675,1678,1680,1682,1685,1688],{"class":514,"line":640},[480,1660,620],{"class":518},[480,1662,1614],{"class":522},[480,1664,1665],{"class":539},"object with ",[480,1667,1620],{"class":522},[480,1669,980],{"class":526},[480,1671,594],{"class":522},[480,1673,1674],{"class":559},"keys",[480,1676,1677],{"class":526},"(value)",[480,1679,594],{"class":522},[480,1681,1108],{"class":526},[480,1683,1684],{"class":522},"}",[480,1686,1687],{"class":539}," keys",[480,1689,1690],{"class":522},"`\n",[480,1692,1693],{"class":514,"line":662},[480,1694,637],{"class":522},[480,1696,1697,1699,1701,1703,1705,1708,1710,1712,1714],{"class":514,"line":668},[480,1698,585],{"class":518},[480,1700,589],{"class":588},[480,1702,311],{"class":526},[480,1704,594],{"class":522},[480,1706,1707],{"class":559},"isArrayFilled",[480,1709,563],{"class":588},[480,1711,567],{"class":526},[480,1713,604],{"class":588},[480,1715,607],{"class":522},[480,1717,1718,1720,1722,1725,1727,1729,1731,1733,1735,1738],{"class":514,"line":673},[480,1719,620],{"class":518},[480,1721,1614],{"class":522},[480,1723,1724],{"class":539},"array with ",[480,1726,1620],{"class":522},[480,1728,567],{"class":526},[480,1730,594],{"class":522},[480,1732,1108],{"class":526},[480,1734,1684],{"class":522},[480,1736,1737],{"class":539}," items",[480,1739,1690],{"class":522},[480,1741,1743],{"class":514,"line":1742},12,[480,1744,637],{"class":522},[480,1746,1748,1751,1753,1756],{"class":514,"line":1747},13,[480,1749,1750],{"class":518},"  return",[480,1752,536],{"class":522},[480,1754,1755],{"class":539},"unknown",[480,1757,542],{"class":522},[480,1759,1761],{"class":514,"line":1760},14,[480,1762,676],{"class":522},[480,1764,1766],{"class":514,"line":1765},15,[480,1767,549],{"emptyLinePlaceholder":548},[480,1769,1771,1774,1776,1779,1782,1784,1787],{"class":514,"line":1770},16,[480,1772,1773],{"class":559},"describe",[480,1775,563],{"class":526},[480,1777,1778],{"class":522},"'",[480,1780,1781],{"class":539},"  hi  ",[480,1783,1778],{"class":522},[480,1785,1786],{"class":526},") ",[480,1788,1789],{"class":613},"\u002F\u002F 'string: hi'\n",[480,1791,1793,1795,1797,1800,1803,1805,1809,1811,1813],{"class":514,"line":1792},17,[480,1794,1773],{"class":559},[480,1796,563],{"class":526},[480,1798,1799],{"class":522},"{",[480,1801,1802],{"class":588}," a",[480,1804,570],{"class":522},[480,1806,1808],{"class":1807},"sbssI"," 1",[480,1810,530],{"class":522},[480,1812,1786],{"class":526},[480,1814,1815],{"class":613},"\u002F\u002F 'object with 1 keys'\n",[480,1817,1819,1821,1824,1827,1829,1832,1834,1837,1840],{"class":514,"line":1818},18,[480,1820,1773],{"class":559},[480,1822,1823],{"class":526},"([",[480,1825,1826],{"class":1807},"1",[480,1828,1346],{"class":522},[480,1830,1831],{"class":1807}," 2",[480,1833,1346],{"class":522},[480,1835,1836],{"class":1807}," 3",[480,1838,1839],{"class":526},"]) ",[480,1841,1842],{"class":613},"\u002F\u002F 'array with 3 items'\n",[471,1844,1845,1846,570],{},"Проверки по тегу и ",[474,1847,494],{},[505,1849,1851],{"className":507,"code":1850,"language":509,"meta":478,"style":478},"import { Type } from '@bitrix24\u002Fb24jssdk'\n\nType.getTag([1, 2, 3])   \u002F\u002F '[object Array]'\nType.getTag(new Map())   \u002F\u002F '[object Map]'\nType.getTag(\u002Fabc\u002F)       \u002F\u002F '[object RegExp]'\n\nType.isMap(new Map())    \u002F\u002F true\nType.isSet(new Set())    \u002F\u002F true\nType.isRegExp(\u002Fabc\u002F)     \u002F\u002F true\n",[474,1852,1853,1871,1875,1901,1923,1947,1951,1971,1990],{"__ignoreMap":478},[480,1854,1855,1857,1859,1861,1863,1865,1867,1869],{"class":514,"line":515},[480,1856,519],{"class":518},[480,1858,523],{"class":522},[480,1860,527],{"class":526},[480,1862,530],{"class":522},[480,1864,533],{"class":518},[480,1866,536],{"class":522},[480,1868,490],{"class":539},[480,1870,542],{"class":522},[480,1872,1873],{"class":514,"line":545},[480,1874,549],{"emptyLinePlaceholder":548},[480,1876,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1898],{"class":514,"line":552},[480,1878,311],{"class":526},[480,1880,594],{"class":522},[480,1882,494],{"class":559},[480,1884,1823],{"class":526},[480,1886,1826],{"class":1807},[480,1888,1346],{"class":522},[480,1890,1831],{"class":1807},[480,1892,1346],{"class":522},[480,1894,1836],{"class":1807},[480,1896,1897],{"class":526},"])   ",[480,1899,1900],{"class":613},"\u002F\u002F '[object Array]'\n",[480,1902,1903,1905,1907,1909,1911,1914,1917,1920],{"class":514,"line":582},[480,1904,311],{"class":526},[480,1906,594],{"class":522},[480,1908,494],{"class":559},[480,1910,563],{"class":526},[480,1912,1913],{"class":522},"new",[480,1915,1916],{"class":559}," Map",[480,1918,1919],{"class":526},"())   ",[480,1921,1922],{"class":613},"\u002F\u002F '[object Map]'\n",[480,1924,1925,1927,1929,1931,1933,1936,1939,1941,1944],{"class":514,"line":610},[480,1926,311],{"class":526},[480,1928,594],{"class":522},[480,1930,494],{"class":559},[480,1932,563],{"class":526},[480,1934,1935],{"class":522},"\u002F",[480,1937,1938],{"class":539},"abc",[480,1940,1935],{"class":522},[480,1942,1943],{"class":526},")       ",[480,1945,1946],{"class":613},"\u002F\u002F '[object RegExp]'\n",[480,1948,1949],{"class":514,"line":617},[480,1950,549],{"emptyLinePlaceholder":548},[480,1952,1953,1955,1957,1959,1961,1963,1965,1968],{"class":514,"line":634},[480,1954,311],{"class":526},[480,1956,594],{"class":522},[480,1958,1001],{"class":559},[480,1960,563],{"class":526},[480,1962,1913],{"class":522},[480,1964,1916],{"class":559},[480,1966,1967],{"class":526},"())    ",[480,1969,1970],{"class":613},"\u002F\u002F true\n",[480,1972,1973,1975,1977,1979,1981,1983,1986,1988],{"class":514,"line":640},[480,1974,311],{"class":526},[480,1976,594],{"class":522},[480,1978,1004],{"class":559},[480,1980,563],{"class":526},[480,1982,1913],{"class":522},[480,1984,1985],{"class":559}," Set",[480,1987,1967],{"class":526},[480,1989,1970],{"class":613},[480,1991,1992,1994,1996,1998,2000,2002,2004,2006,2009],{"class":514,"line":662},[480,1993,311],{"class":526},[480,1995,594],{"class":522},[480,1997,1013],{"class":559},[480,1999,563],{"class":526},[480,2001,1935],{"class":522},[480,2003,1938],{"class":539},[480,2005,1935],{"class":522},[480,2007,2008],{"class":526},")     ",[480,2010,1970],{"class":613},[471,2012,2013],{},"Формы JSON-RPC сообщений:",[505,2015,2017],{"className":507,"code":2016,"language":509,"meta":478,"style":478},"import { Type } from '@bitrix24\u002Fb24jssdk'\n\nType.isJsonRpcRequest({ jsonrpc: '2.0', method: 'ping', id: 1 }) \u002F\u002F true\nType.isJsonRpcRequest({ jsonrpc: '2.0' })                         \u002F\u002F false, нет `method`\n\nType.isJsonRpcResponse({ jsonrpc: '2.0', id: 1, result: { ok: true } }) \u002F\u002F true\nType.isJsonRpcResponse({ jsonrpc: '2.0', id: 1 })                       \u002F\u002F false, нет `result`\u002F`error`\n",[474,2018,2019,2037,2041,2094,2124,2128,2184],{"__ignoreMap":478},[480,2020,2021,2023,2025,2027,2029,2031,2033,2035],{"class":514,"line":515},[480,2022,519],{"class":518},[480,2024,523],{"class":522},[480,2026,527],{"class":526},[480,2028,530],{"class":522},[480,2030,533],{"class":518},[480,2032,536],{"class":522},[480,2034,490],{"class":539},[480,2036,542],{"class":522},[480,2038,2039],{"class":514,"line":545},[480,2040,549],{"emptyLinePlaceholder":548},[480,2042,2043,2045,2047,2049,2051,2053,2056,2058,2060,2063,2065,2067,2070,2072,2074,2077,2079,2081,2084,2086,2088,2090,2092],{"class":514,"line":552},[480,2044,311],{"class":526},[480,2046,594],{"class":522},[480,2048,1371],{"class":559},[480,2050,563],{"class":526},[480,2052,1799],{"class":522},[480,2054,2055],{"class":588}," jsonrpc",[480,2057,570],{"class":522},[480,2059,536],{"class":522},[480,2061,2062],{"class":539},"2.0",[480,2064,1778],{"class":522},[480,2066,1346],{"class":522},[480,2068,2069],{"class":588}," method",[480,2071,570],{"class":522},[480,2073,536],{"class":522},[480,2075,2076],{"class":539},"ping",[480,2078,1778],{"class":522},[480,2080,1346],{"class":522},[480,2082,2083],{"class":588}," id",[480,2085,570],{"class":522},[480,2087,1808],{"class":1807},[480,2089,530],{"class":522},[480,2091,1786],{"class":526},[480,2093,1970],{"class":613},[480,2095,2096,2098,2100,2102,2104,2106,2108,2110,2112,2114,2116,2118,2121],{"class":514,"line":582},[480,2097,311],{"class":526},[480,2099,594],{"class":522},[480,2101,1371],{"class":559},[480,2103,563],{"class":526},[480,2105,1799],{"class":522},[480,2107,2055],{"class":588},[480,2109,570],{"class":522},[480,2111,536],{"class":522},[480,2113,2062],{"class":539},[480,2115,1778],{"class":522},[480,2117,530],{"class":522},[480,2119,2120],{"class":526},")                         ",[480,2122,2123],{"class":613},"\u002F\u002F false, нет `method`\n",[480,2125,2126],{"class":514,"line":610},[480,2127,549],{"emptyLinePlaceholder":548},[480,2129,2130,2132,2134,2136,2138,2140,2142,2144,2146,2148,2150,2152,2154,2156,2158,2160,2163,2165,2167,2170,2172,2176,2178,2180,2182],{"class":514,"line":617},[480,2131,311],{"class":526},[480,2133,594],{"class":522},[480,2135,1374],{"class":559},[480,2137,563],{"class":526},[480,2139,1799],{"class":522},[480,2141,2055],{"class":588},[480,2143,570],{"class":522},[480,2145,536],{"class":522},[480,2147,2062],{"class":539},[480,2149,1778],{"class":522},[480,2151,1346],{"class":522},[480,2153,2083],{"class":588},[480,2155,570],{"class":522},[480,2157,1808],{"class":1807},[480,2159,1346],{"class":522},[480,2161,2162],{"class":588}," result",[480,2164,570],{"class":522},[480,2166,523],{"class":522},[480,2168,2169],{"class":588}," ok",[480,2171,570],{"class":522},[480,2173,2175],{"class":2174},"sfNiH"," true",[480,2177,530],{"class":522},[480,2179,530],{"class":522},[480,2181,1786],{"class":526},[480,2183,1970],{"class":613},[480,2185,2186,2188,2190,2192,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216,2219],{"class":514,"line":634},[480,2187,311],{"class":526},[480,2189,594],{"class":522},[480,2191,1374],{"class":559},[480,2193,563],{"class":526},[480,2195,1799],{"class":522},[480,2197,2055],{"class":588},[480,2199,570],{"class":522},[480,2201,536],{"class":522},[480,2203,2062],{"class":539},[480,2205,1778],{"class":522},[480,2207,1346],{"class":522},[480,2209,2083],{"class":588},[480,2211,570],{"class":522},[480,2213,1808],{"class":1807},[480,2215,530],{"class":522},[480,2217,2218],{"class":526},")                       ",[480,2220,2221],{"class":613},"\u002F\u002F false, нет `result`\u002F`error`\n",[471,2223,2224,2225,570],{},"Глубокое клонирование через ",[474,2226,498],{},[505,2228,2230],{"className":507,"code":2229,"language":509,"meta":478,"style":478},"import { Type } from '@bitrix24\u002Fb24jssdk'\n\nconst original = { a: 1, nested: { b: 2 } }\n\nconst deep = Type.clone(original)\ndeep.nested.b = 99\nconsole.log(original.nested.b) \u002F\u002F 2 — не тронуто, глубокое клонирование\n\nconst shallow = Type.clone(original, false)\nshallow.nested.b = 42\nconsole.log(original.nested.b) \u002F\u002F 42 — та же вложенная ссылка, поверхностное клонирование\n",[474,2231,2232,2250,2254,2294,2298,2316,2336,2361,2365,2390,2408],{"__ignoreMap":478},[480,2233,2234,2236,2238,2240,2242,2244,2246,2248],{"class":514,"line":515},[480,2235,519],{"class":518},[480,2237,523],{"class":522},[480,2239,527],{"class":526},[480,2241,530],{"class":522},[480,2243,533],{"class":518},[480,2245,536],{"class":522},[480,2247,490],{"class":539},[480,2249,542],{"class":522},[480,2251,2252],{"class":514,"line":545},[480,2253,549],{"emptyLinePlaceholder":548},[480,2255,2256,2259,2262,2265,2267,2269,2271,2273,2275,2278,2280,2282,2285,2287,2289,2291],{"class":514,"line":552},[480,2257,2258],{"class":555},"const",[480,2260,2261],{"class":526}," original ",[480,2263,2264],{"class":522},"=",[480,2266,523],{"class":522},[480,2268,1802],{"class":588},[480,2270,570],{"class":522},[480,2272,1808],{"class":1807},[480,2274,1346],{"class":522},[480,2276,2277],{"class":588}," nested",[480,2279,570],{"class":522},[480,2281,523],{"class":522},[480,2283,2284],{"class":588}," b",[480,2286,570],{"class":522},[480,2288,1831],{"class":1807},[480,2290,530],{"class":522},[480,2292,2293],{"class":522}," }\n",[480,2295,2296],{"class":514,"line":582},[480,2297,549],{"emptyLinePlaceholder":548},[480,2299,2300,2302,2305,2307,2309,2311,2313],{"class":514,"line":610},[480,2301,2258],{"class":555},[480,2303,2304],{"class":526}," deep ",[480,2306,2264],{"class":522},[480,2308,527],{"class":526},[480,2310,594],{"class":522},[480,2312,498],{"class":559},[480,2314,2315],{"class":526},"(original)\n",[480,2317,2318,2321,2323,2326,2328,2331,2333],{"class":514,"line":617},[480,2319,2320],{"class":526},"deep",[480,2322,594],{"class":522},[480,2324,2325],{"class":526},"nested",[480,2327,594],{"class":522},[480,2329,2330],{"class":526},"b ",[480,2332,2264],{"class":522},[480,2334,2335],{"class":1807}," 99\n",[480,2337,2338,2341,2343,2346,2349,2351,2353,2355,2358],{"class":514,"line":634},[480,2339,2340],{"class":526},"console",[480,2342,594],{"class":522},[480,2344,2345],{"class":559},"log",[480,2347,2348],{"class":526},"(original",[480,2350,594],{"class":522},[480,2352,2325],{"class":526},[480,2354,594],{"class":522},[480,2356,2357],{"class":526},"b) ",[480,2359,2360],{"class":613},"\u002F\u002F 2 — не тронуто, глубокое клонирование\n",[480,2362,2363],{"class":514,"line":640},[480,2364,549],{"emptyLinePlaceholder":548},[480,2366,2367,2369,2372,2374,2376,2378,2380,2382,2384,2387],{"class":514,"line":662},[480,2368,2258],{"class":555},[480,2370,2371],{"class":526}," shallow ",[480,2373,2264],{"class":522},[480,2375,527],{"class":526},[480,2377,594],{"class":522},[480,2379,498],{"class":559},[480,2381,2348],{"class":526},[480,2383,1346],{"class":522},[480,2385,2386],{"class":2174}," false",[480,2388,2389],{"class":526},")\n",[480,2391,2392,2395,2397,2399,2401,2403,2405],{"class":514,"line":668},[480,2393,2394],{"class":526},"shallow",[480,2396,594],{"class":522},[480,2398,2325],{"class":526},[480,2400,594],{"class":522},[480,2402,2330],{"class":526},[480,2404,2264],{"class":522},[480,2406,2407],{"class":1807}," 42\n",[480,2409,2410,2412,2414,2416,2418,2420,2422,2424,2426],{"class":514,"line":673},[480,2411,2340],{"class":526},[480,2413,594],{"class":522},[480,2415,2345],{"class":559},[480,2417,2348],{"class":526},[480,2419,594],{"class":522},[480,2421,2325],{"class":526},[480,2423,594],{"class":522},[480,2425,2357],{"class":526},[480,2427,2428],{"class":613},"\u002F\u002F 42 — та же вложенная ссылка, поверхностное клонирование\n",[466,2430,2432],{"id":2431},"alternatives-and-recommendations","Альтернативы и рекомендации",[681,2434,2435,2456,2485,2517,2541],{},[684,2436,2437,2449,2450,2452,2453,2455],{},[687,2438,2439,2440,2442,2443,706,2446,594],{},"Предпочитайте методы-type-guards (",[474,2441,1382],{},") ручным проверкам ",[474,2444,2445],{},"typeof",[474,2447,2448],{},"instanceof"," Они читаются так же, но ещё и сужают TypeScript-тип значения внутри ветки ",[474,2451,502],{},", чего две возвращающие ",[474,2454,1280],{}," проверки JSON-RPC не делают.",[684,2457,2458,1455,2470,2472,2473,2476,2477,716,2479,2481,2482,2484],{},[687,2459,2460,2461,2463,2464,2467,2468,594],{},"Используйте ",[474,2462,651],{}," вместо ",[474,2465,2466],{},"isObject",", когда нужен объект-запись в стиле ",[474,2469,1423],{},[474,2471,2466],{}," также принимает функции, а ",[474,2474,2475],{},"isObjectLike"," принимает массивы, ",[474,2478,705],{},[474,2480,1416],{}," и DOM-узлы — ",[474,2483,651],{}," единственный из трёх исключает всё это.",[684,2486,2487,2496,2497,2500,2501,2504,2505,2507,2508,2510,2511,2514,2515,594],{},[687,2488,2489,2492,2493,594],{},[474,2490,2491],{},"isTypedArray"," покрывает девять конкретных представлений типизированных массивов, но не ",[474,2494,2495],{},"DataView"," Он соответствует ",[474,2498,2499],{},"Int8Array"," … ",[474,2502,2503],{},"Float64Array",", но возвращает ",[474,2506,1484],{}," для ",[474,2509,2495],{},"; используйте ",[474,2512,2513],{},"ArrayBuffer.isView(value)",", когда хотите включить и ",[474,2516,2495],{},[684,2518,2519,1455,2528,2530,2531,706,2534,706,2537,2540],{},[687,2520,2521,2522,594],{},"Приведение и форматирование строк\u002Fчисел живут в ",[2523,2524,2526],"a",{"href":2525},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-text\u002F",[474,2527,306],{},[474,2529,311],{}," только проверяет формы; используйте ",[474,2532,2533],{},"Text.toNumber",[474,2535,2536],{},"Text.toInteger",[474,2538,2539],{},"Text.toBoolean",", когда нужно преобразовать значение, а не просто проверить его.",[684,2542,2543,2548,2549,706,2551,706,2553,2555,2556,2559],{},[687,2544,2545,2547],{},[474,2546,498],{}," — это универсальное глубокое клонирование, а не замена structured-clone."," Для значений, которыми вы управляете (обычные данные из REST API), его достаточно; для payload'ов ",[474,2550,705],{},[474,2552,709],{},[474,2554,735],{}," или значений, требующих точной верности прототипа, предпочитайте ",[474,2557,2558],{},"structuredClone"," (где доступен) или специализированную библиотеку клонирования.",[2561,2562,2563],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":478,"searchDepth":545,"depth":545,"links":2565},[2566,2567,2577,2578,2579,2580],{"id":468,"depth":545,"text":469},{"id":780,"depth":545,"text":781,"children":2568},[2569,2570,2571,2572,2573,2574,2575,2576],{"id":785,"depth":552,"text":689},{"id":836,"depth":552,"text":695},{"id":903,"depth":552,"text":701},{"id":1059,"depth":552,"text":731},{"id":1136,"depth":552,"text":740},{"id":1189,"depth":552,"text":1190},{"id":1248,"depth":552,"text":761},{"id":1309,"depth":552,"text":767},{"id":1361,"depth":545,"text":1362},{"id":1507,"depth":545,"text":375},{"id":362,"depth":545,"text":352},{"id":2431,"depth":545,"text":2432},"md",[2583],{"label":311,"iconName":2584,"to":2585},"GitHubIcon","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Ftools\u002Ftype.ts",{},{"title":311},{"title":311,"description":314},"0Iw1VlGlUAWAkNg-e1wkbzAj6SKtShK1P2m1JQ7YUj0",{"data":2591,"body":2592},{},{"type":2593,"children":2594},"root",[2595],{"type":2596,"tag":471,"props":2597,"children":2598},"element",{},[2599],{"type":2600,"value":314},"text",1783080228890]