Zum Inhalt springen
100% lokal

Protobuf-Schema in TypeScript-Typen

Konvertieren Sie ein Protobuf-Schema in entsprechende TypeScript-Schnittstellen, Enums und Union-Typen.

Eingabe
Ausgabe

Protobuf-Schema in TypeScript-Typen

Fügen Sie ein Protobuf-Schema ein, und dieses Tool generiert die entsprechenden TypeScript-Typen: eine Schnittstelle pro Nachricht, ein Enum pro Protobuf-Enum und einen Union-Typ für jedes Oneof. Verwenden Sie es, wenn eine .proto-Datei das Drahtformat einer API definiert und Sie einen typsicheren Client ohne vollständigen protoc-Toolchain wünschen.

Wählen Sie proto2 oder proto3, um zu steuern, wie nackte Felder gelesen werden: proto3 mit impliziter Präsenz behält einzelne Skalar- und Enum-Felder immer vorhanden, während nachrichtengefüllte Felder optional bleiben; proto2 liest stattdessen das explizite erforderliche und optionale Schlüsselwort auf jedem Feld. 64-Bit-Ganzzahlen werden standardmäßig auf String abgebildet, da JavaScript-Nummern die Genauigkeit über 2^53 verlieren – deaktivieren Sie die Option, um stattdessen auf Nummer zu setzen. Wiederholte Felder werden zu Arrays und map<K, V>-Felder werden zu Record<K, V>. Ein Oneof bricht entweder zu einem diskriminierten Union-Typ zusammen, sodass nur ein Element gesetzt werden kann, oder wird zu gewöhnlichen optionalen Feldern abgeflacht. Verschachtelte Typen behälten ihre Verschachtelung in den generierten Namen (Outer_Inner), Feldnamen können snake_case bleiben oder zu camelCase konvertiert werden, Kommentare werden als JSDoc übertragen, und das Aktivieren der Service-Generierung fügt eine Schnittstelle pro Protobuf-Service mit jeder RPC-Typ für unäre oder Streaming-Aufrufe hinzu.

Der Konverter ist ein handgeschriebener Parser, kein Wrapper um protoc: Er deckt die alltägliche Form eines Schemas ab – Nachrichten, Enums, Oneofs, Maps, verschachtelte Typen und Services – während er Optionen, Erweiterungen und reservierte Feldanweisungen überspring, die er nicht benötigt, um einen Typ zu reproduzieren. Ein fehlender Punkt- komma oder eine nicht abgestimmte Klammer erzeugt einen klaren Fehler, der grob angibt, wo es passiert ist.

Alles läuft lokal in Ihrem Browser; Ihr Schema wird niemals hochgeladen, daher ist es sicher, proprietäre API-Definitionen einzufügen. Kopieren Sie das Ergebnis, laden Sie es als .txt-Datei herunter, oder senden Sie es zurück in die Eingabe, um das Schema weiter zu verfeinern.

Häufige Fragen

Unterstützt es sowohl proto2 als auch proto3?
Ja. Wählen Sie die Syntax-Option, oder lassen Sie sie wie gewohnt: ein Schema, das mit einer syntax = "proto2"; oder syntax = "proto3"; Zeile beginnt, wird aus dem Schema selbst gelesen und die Option dient nur als Fallback, wenn diese Zeile fehlt.
Wie werden 64-Bit-Ganzzahlfelder behandelt?
int64, uint64, sint64, fixed64 und sfixed64 werden standardmäßig auf String abgebildet, da JavaScript-Nummern die vollständige 64-Bit-Reichweite über 2^53 nicht genau darstellen können. Deaktivieren Sie die Option "64-Bit-Ganzzahlen als String", um sie stattdessen auf Nummer abzubilden.
Was passiert mit einer Oneof-Gruppe?
Mit "Oneof als Union-Typ darstellen" aktiviert, wird ein Oneof zu einer diskriminierten TypeScript-Union, sodass nur ein Element gesetzt werden kann. Wenn Sie es ausschalten, wird jedes Element zu seinem eigenen optionalen Feld.
Generiert es Typen für gRPC-Services?
Aktivieren Sie "Service-Methodentypen generieren", um eine TypeScript-Schnittstelle pro Service hinzuzufügen, wobei jede rpc-Methode für einen unären Aufruf oder Streaming mit AsyncIterable eingegeben wird und dem Schema's stream-Schlüsselwort entspricht.
Wird mein Schema irgendwo hochgeladen?
Nein. Das Schema wird vollständig in Ihrem Browser geparst und konvertiert – nichts wird an einen Server gesendet, daher ist es sicher, interne oder nicht freigegebene API-Definitionen einzufügen.