Перейти до вмісту
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.