Перейти к содержанию
100% локально

Схема Protobuf в типы TypeScript

Преобразуйте схему Protobuf в соответствующие интерфейсы TypeScript, перечисления и объединения.

Входные данные
Выходные данные

Схема Protobuf в типы TypeScript

Вставьте схему Protobuf, и этот инструмент создаст соответствующие типы TypeScript: один интерфейс для каждого сообщения, одно перечисление для каждого перечисления Protobuf и тип объединения для каждого oneof. Используйте его, когда файл .proto определяет формат линии передачи API и вам нужен типобезопасный клиент без полного набора инструментов protoc.

Выберите proto2 или proto3 для управления способом чтения голых полей: неявное присутствие proto3 сохраняет скалярные и перечисляемые поля всегда присутствующими, а поля типа сообщения остаются необязательными; proto2 вместо этого читает явное ключевое слово required или optional для каждого поля. 64-битные целые числа по умолчанию преобразуются в строку, так как числа JavaScript теряют точность выше 2^53 — отключите опцию для получения числа вместо этого. Повторяющиеся поля становятся массивами, а поля map<K, V> становятся Record<K, V>. Oneof либо преобразуется в дискриминированный тип объединения, чтобы одновременно мог быть установлен только один член, либо преобразуется в обычные необязательные поля. Вложенные типы сохраняют свою вложенность в созданных именах (Outer_Inner), имена полей могут оставаться в snake_case или преобразуются в camelCase, комментарии переносятся как JSDoc, а включение генерации сервиса добавляет один интерфейс для каждого сервиса Protobuf с каждым методом rpc типизированным для унарных или потоковых вызовов.

Конвертер — это написанный вручную парсер, а не обёртка вокруг protoc: он охватывает обычную форму схемы — сообщения, перечисления, oneofs, карты, вложенные типы и сервисы — пропуская опции, расширения и зарезервированные операторы полей, которые ему не нужны для воспроизведения типа. Отсутствующая точка с запятой или несовпадающая скобка дает четкую ошибку с указанием примерно того, где это произошло.

Всё выполняется локально в вашем браузере; ваша схема никогда не загружается, поэтому безопасно вставлять определения собственных API. Скопируйте результат, загрузите его как файл .txt или отправьте обратно во входные данные, чтобы продолжить уточнение схемы.

FAQ

Поддерживает ли он как proto2, так и proto3?
Да. Выберите опцию синтаксиса или оставьте как есть: схема, которая начинается со строки syntax = "proto2"; или syntax = "proto3";, читается из самой схемы, и опция действует только как резервная, когда эта строка отсутствует.
Как обрабатываются 64-битные целые поля?
int64, uint64, sint64, fixed64 и sfixed64 по умолчанию преобразуются в строку, потому что числа JavaScript не могут точно представить полный диапазон 64-бит. Отключите параметр "64-bit integers as string", чтобы вместо этого преобразовать их в число.
Что происходит с группой oneof?
Если параметр "Represent oneof as a union type" включен, oneof становится дискриминированным типом объединения TypeScript, так что одновременно может быть установлен только один член. Если он отключен, каждый член становится его собственным необязательным полем.
Генерирует ли он типы для gRPC сервисов?
Включите "Generate service method types", чтобы добавить один интерфейс TypeScript для каждого сервиса, где каждый метод rpc типизирован для унарного вызова или потоковой передачи с AsyncIterable, соответствуя ключевым словам потока в схеме.
Загружается ли моя схема куда-нибудь?
Нет. Схема анализируется и преобразуется полностью в вашем браузере — на сервер ничего не отправляется, поэтому безопасно вставлять определения внутреннего или неопубликованного API.