TS → Protobuf proto3
Automatisation des Schémas de Microservices et RPC

Convertisseur TypeScript Interface vers Protocol Buffers proto3

Traduisez vos interfaces et types TypeScript en messages Protobuf 3 avec tags incrémentaux et enums.

Confidentialité 100% côté client
Zéro transmission au serveur
Préréglages :
Options du Compilateur Protobuf 3 et Attribution des Tags
syntax = "proto3"•snake_case
Interface / Types TypeScript
syntax = "proto3";
package identity.v1;
Messages Proto0 messages (0 champs)
Énumérations0 énumérations analysées
Services gRPC0 Services gRPC (identity.v1)

Analyse AST TypeScript 100% Côté Client

Aucun envoi vers un serveur ni base de données. L'extraction des interfaces TypeScript, la tokenisation des types et la compilation du schéma Protobuf s'exécutent en mémoire dans le navigateur.

Attribution Intelligente des Tags Proto3 et Normalisation

Numérotation continue des champs à partir de 1, conversion en snake_case et résolution des Record en map.

Génération de Services gRPC et Proto3 pour la Production

Génère des contrats d'interfaces RPC exploitables directement dans vos architectures microservices.

Référence technique et guide d'architecture

Guide du Développeur du Convertisseur TypeScript Interface vers Protocol Buffers proto3 — Guide de référence

Traduisez vos interfaces et types TypeScript en messages Protobuf 3 avec tags incrémentaux et enums.

Paramètres clés et contrôles

Casse des Noms de ChampsEnum (snake_case | camelCase | preserve)

Spécifie la convention de nommage des champs générés. Les recommandations officielles de Google préconisent lower_snake_case pour les champs de messages Protobuf.

Par défaut : snake_case
Type Numérique par DéfautEnum (int32 | int64 | double | float | uint32)

Définit le type scalaire Protobuf associé au type primitif générique 'number' de TypeScript.

Par défaut : int32
Mode des Champs OptionnelsEnum (proto3_optional | implicit | wrappers)

Contrôle la déclaration des propriétés optionnelles TypeScript (field?: type). 'proto3_optional' insère le mot-clé explicite 'optional' pour le suivi de présence.

Par défaut : proto3_optional
Nom du Package ProtoString

Définit l'espace de noms du package au début du fichier .proto généré afin d'éviter les collisions dans les architectures microservices.

Par défaut : api.v1
Imports Automatiques des Types StandardsBoolean

Détecte automatiquement les types Date, unknown ou Record de TypeScript et injecte les imports correspondants google/protobuf/timestamp.proto ou struct.proto.

Par défaut : true

Conseils de pro et bonnes practices

Préserver l'Immuabilité des Numéros de Tag

Dans un schéma Protobuf en production, ne modifiez ni ne réattribuez jamais les numéros de tags existants (1, 2, 3...). Ajoutez systématiquement les nouveaux champs à la suite avec des identifiants croissants ou utilisez la clause reserved.

Conversion des Dates en Timestamp

Les propriétés de type Date en TypeScript sont automatiquement mappées vers 'google.protobuf.Timestamp'. Vérifiez que votre compilateur protoc intègre les Google Well-Known Types.

Mappage des Record et Dictionnaires

Les types TypeScript 'Record<string, T>' ou les signatures d'index '{ [key: string]: T }' sont convertis directement en champs 'map<string, T>' sans messages intermédiaires superflus.

Types Union Discriminés en oneof

Les unions discriminées (ex. type Event = A | B) doivent être modélisées avec des blocs 'oneof' Protobuf afin d'assurer l'exclusion mutuelle et d'optimiser l'encodage binaire sur le réseau.

Pièges courants et dépannage

Correspondance ambiguë du type 'number' TypeScript avec les scalaires Protobuf

Puisque 'number' désigne indistinctement des entiers ou des réels, ajustez l'option 'Type Numérique par Défaut' ou commentez vos propriétés avec des tags JSDoc tels que /** @type {int64} */ ou /** @type {double} */.

Erreur d'importation introuvable pour google/protobuf/timestamp.proto avec protoc

Assurez-vous que l'option 'Imports Automatiques des Types Standards' est activée et que les répertoires d'inclusion de protoc ou buf contiennent bien les Well-Known Types officiels.

Objets anonymes imbriqués dans les interfaces provoquant des erreurs de syntaxe

Protobuf exige que chaque message possède un identifiant nommé explicite. Isolez les objets anonymes (ex. { user: { id: string } }) dans des interfaces dédiées (ex. interface UserSummary) avant la conversion.

Foire aux questions (FAQ)

Comment les tableaux TypeScript sont-ils convertis en Protocol Buffers ?▼

Les tableaux TypeScript (T[] ou Array<T>) sont transcrits avec la règle 'repeated' de proto3 (ex. 'repeated string tags = 3;'). Pour les scalaires numériques, proto3 active automatiquement l'encodage compacté (packed encoding) pour maximiser les performances réseau.

Comment le convertisseur gère-t-il les champs optionnels (field?: type) en proto3 ?▼

En proto3, les champs simples possèdent une valeur par défaut sans suivi de présence explicite. Avec le mode 'proto3_optional', le convertisseur ajoute le mot-clé 'optional' (supporté dès Protobuf v3.15+), générant un bloc oneof synthétique pour tester si le champ a été renseigné.

Les enums TypeScript (string ou numériques) peuvent-ils être convertis en enums proto3 ?▼

Oui. Les enums TypeScript sont convertis en blocs 'enum' proto3. Comme proto3 exige impérativement que la première valeur d'un enum soit égale à 0, le convertisseur insère automatiquement une valeur UNSPECIFIED = 0 si aucune valeur 0 n'est définie.

Mes interfaces TypeScript sont-elles envoyées sur un serveur distant ?▼

Non. L'analyse lexicale AST, la tokenisation et la compilation du fichier .proto s'effectuent à 100% dans le moteur JavaScript local de votre navigateur. Aucune donnée ne transite par le réseau.

Comment l'héritage d'interfaces (extends) et les intersections de types sont-ils pris en charge ?▼

Les propriétés héritées ('interface Child extends Parent') et les types d'intersection ('type Combined = A & B') sont fusionnés et aplatis dans le message Protobuf résultant avec des numéros de tags incrémentaux continus.

Outils et utilitaires connexes

Tous les outils →