Sări la conținut
Complet local

Schema Protobuf pentru tipuri TypeScript

Transformați o schemă Protobuf în interfețe TypeScript, enumerări și tipuri uniune corespunzătoare.

Intrare
Ieșire

Schema Protobuf pentru tipuri TypeScript

Lipiți o schemă Protobuf și această unealtă generează tipurile TypeScript corespunzătoare: o interfață per mesaj, o enumerare per enumerare Protobuf și un tip uniune pentru fiecare oneof. Utilizați-o atunci când un fișier .proto definește formatul de transmisie al unui API și doriți un client type-safe fără a executa lanțul complet de instrumente protoc.

Alegeți proto2 sau proto3 pentru a controla modul în care sunt citite câmpurile: proto3 cu prezență implicită păstrează câmpurile scalare singulare și de enumerare întotdeauna prezente, în timp ce câmpurile de tip mesaj rămân opționale; proto2 citește în schimb cuvântul cheie explicit required sau optional pe fiecare câmp. Numerele întregi pe 64 de biți sunt mapate la string în mod implicit, deoarece numerele JavaScript pierd precizie deasupra 2^53 — opriți opțiunea pentru a utiliza number în schimb. Câmpurile repetate devin matrice și câmpurile map<K, V> devin Record<K, V>. Un oneof fie se transformă într-un tip uniune discriminat, astfel încât doar un membru poate fi setat la o dată, fie se aplatizează în câmpuri opționale obișnuite. Tipurile imbricate își păstrează imbricarea în numele generate (Outer_Inner), numele câmpurilor pot rămâne snake_case sau se convertesc la camelCase, comentariile sunt transportate ca JSDoc și activarea generării de servicii adaugă o interfață per serviciu Protobuf cu fiecare rpc tastat pentru apeluri uniare sau de streaming.

Conversia este un analizor scris manual, nu un wrapper în jurul protoc: acoperă forma de zi cu zi a unei scheme — mesaje, enumerări, oneofs, mapări, tipuri imbricate și servicii — în timp ce omite opțiuni, extensii și instrucțiuni privind câmpurile rezervate pe care nu trebuie să le reproducă un tip. O virgulă lipsă sau o paranteză nepotrivită produce o eroare clară care numește aproximativ unde s-a întâmplat.

Tot se execută local în browserul dvs.; schema dvs. nu este niciodată încărcată, deci este sigur să lipiți definiții proprietare ale API-ului. Copiați rezultatul, descărcați-l ca fișier .txt sau trimiteti-l înapoi la intrare pentru a continua rafinarea schemei.

FAQ

Acceptă atât proto2 cât și proto3?
Da. Alegeți opțiunea de sintaxă sau lăsați-o așa cum este: o schemă care începe cu o linie syntax = "proto2"; sau syntax = "proto3"; este citită din schema în sine și opțiunea acționează doar ca rezervă când acea linie lipsește.
Cum sunt tratate câmpurile de numere întregi pe 64 de biți?
int64, uint64, sint64, fixed64 și sfixed64 sunt mapate la string în mod implicit, deoarece numerele JavaScript nu pot reprezenta complet intervalul pe 64 de biți cu precizie. Opriți "Numere întregi pe 64 de biți ca șir" pentru a le mapa la number în schimb.
Ce se întâmplă cu un grup oneof?
Cu "Reprezentați oneof ca tip uniune" activat, un oneof devine o uniune TypeScript discriminată, deci doar un membru poate fi setat. Cu opțiunea dezactivată, fiecare membru devine propriul câmp opțional.
Generează tipuri pentru serviciile gRPC?
Activați "Generați tipuri de metode de serviciu" pentru a adăuga o interfață TypeScript per serviciu, cu fiecare metodă rpc tastată pentru un apel unar sau de streaming cu AsyncIterable, corespunzând cuvintelor cheie stream ale schemei.
Schema mea este încărcată undeva?
Nu. Schema este analizată și convertită în întregime în browserul dvs. — nimic nu este trimis la un server, deci este sigur să lipiți o definiție API internă sau nelansată.