Saltar al contenido

Esquema Protobuf a tipos TypeScript

Convierte un esquema Protobuf en interfaces TypeScript, enums y tipos union.

Entrada

Esquema Protobuf a tipos TypeScript

Pega un esquema Protobuf y esta herramienta genera los tipos TypeScript correspondientes: una interfaz por mensaje, un enum por cada enum de Protobuf, y un tipo union por cada oneof. Úsala cuando un archivo .proto define el formato de una API y quieres un cliente type-safe sin ejecutar la cadena completa de protoc.

Elige proto2 o proto3 para controlar cómo se leen los campos básicos: proto3 mantiene presencia implícita, manteniendo campos escalares y enum siempre presentes mientras que los campos de mensaje siguen siendo opcionales; proto2 en cambio lee las palabras clave required u optional explícitamente en cada campo. Los enteros de 64 bits se mapean a string por defecto, ya que los números de JavaScript pierden precisión por encima de 2^53 — desactiva la opción para usar number en su lugar. Los campos repetidos se convierten en arrays y los campos map<K, V> en Record<K, V>. Un oneof puede colapsar en un tipo union discriminado para que solo un miembro esté presente a la vez, o aplanarse en campos opcionales ordinarios. Los tipos anidados mantienen su anidación en los nombres generados (Outer_Inner), los nombres de campos pueden permanecer en snake_case o convertirse a camelCase, los comentarios se mantienen como JSDoc, y activar la generación de servicios añade una interfaz por servicio Protobuf con cada rpc tipificado para llamadas unarias o en streaming.

El convertidor es un analizador escrito a mano, no un contenedor alrededor de protoc: cubre la forma cotidiana de un esquema — mensajes, enums, oneofs, maps, tipos anidados y servicios — mientras salta opciones, extensiones y declaraciones de campos reservados que no necesita reproducir un tipo. Un punto y coma faltante o una llave sin emparejar produce un error claro indicando aproximadamente dónde ocurrió.

Todo se ejecuta localmente en tu navegador; tu esquema nunca se sube, así que es seguro pegar definiciones de API propietarias. Copia el resultado, descárgalo como archivo .txt, o envíalo de vuelta a la entrada para seguir refinando el esquema.

Preguntas frecuentes

¿Soporta tanto proto2 como proto3?
Sí. Elige la opción de sintaxis o déjala como está: un esquema que comienza con una línea syntax = "proto2"; o syntax = "proto3"; se lee del esquema mismo y la opción solo actúa como alternativa cuando esa línea falta.
¿Cómo se manejan los campos de enteros de 64 bits?
int64, uint64, sint64, fixed64 y sfixed64 se mapean a string por defecto, porque los números de JavaScript no pueden representar el rango completo de 64 bits con precisión. Desactiva la opción "Enteros de 64 bits como string" para mapearlos a number en su lugar.
¿Qué sucede con un grupo oneof?
Con "Representar oneof como tipo union" activado, un oneof se convierte en un tipo union discriminado de TypeScript para que solo un miembro pueda estar presente. Con desactivado, cada miembro se convierte en su propio campo opcional.
¿Genera tipos para servicios gRPC?
Activa "Generar tipos de métodos de servicio" para añadir una interfaz de TypeScript por servicio, con cada método rpc tipificado para una llamada unaria o en streaming con AsyncIterable, coincidiendo con las palabras clave stream del esquema.
¿Se sube mi esquema a algún lugar?
No. El esquema se analiza y convierte completamente en tu navegador — nada se envía a un servidor, así que es seguro pegar una definición de API interna o no publicada.