19 puntos por xguru 2025-02-06 | Aún no hay comentarios. | Compartir por WhatsApp
  • Una especificación diseñada para que las bibliotecas de esquemas basadas en JavaScript/TypeScript implementen una interfaz común
  • Su objetivo es permitir reutilizar la lógica de validación de tipos definida por el usuario entre distintas bibliotecas, haciendo que las herramientas sean compatibles entre sí sin adaptadores separados
  • Fue diseñada en conjunto por los creadores de bibliotecas principales como Zod, Valibot y ArkType

Interfaz principal (StandardSchemaV1)

  • Toda la especificación se implementa mediante una propiedad de objeto llamada ~standard
  • Dentro de ~standard existen propiedades obligatorias como version, vendor, validate y types
  • La función validate devuelve value si tiene éxito, y un arreglo issues si falla
  • La propiedad types permite inferir en TypeScript los tipos de entrada (input) y salida (output) del esquema
  • Todas las actualizaciones mantienen compatibilidad mientras no sean una versión mayor

Objetivos de diseño

  • Soporte de validación en tiempo de ejecución: entrega la información de errores de forma estandarizada
  • Soporte para inferencia de tipos estáticos: expone explícitamente la información de tipos inferida por bibliotecas basadas en TypeScript
  • Simplicidad: puede implementarse agregando solo unas pocas líneas a funciones existentes de la biblioteca
  • Evitar conflictos de API: todo se coloca dentro del espacio de nombres ~standard para no chocar con APIs existentes
  • Mantener una buena experiencia de desarrollo: al comenzar con tilde (~standard), su prioridad baja en el autocompletado

Qué bibliotecas lo están implementando

  • Zod, Valibot, ArkType, Arri Schema, TypeMap y otras ya ofrecen soporte para Standard Schema
  • tRPC, TanStack Form, TanStack Router y Hono Middleware también aceptan esquemas de usuario basados en Standard Schema

Cómo implementar la especificación en tu propia biblioteca

  • Copia la interfaz StandardSchemaV1 en tu biblioteca y agrega la propiedad ~standard
  • Conecta la función validate con tu función de validación existente para que devuelva { value } en caso de éxito y { issues } en caso de error
  • Si es necesario, también se puede hacer validación asíncrona, aunque se recomienda la validación síncrona

Cómo recibir esquemas definidos por el usuario con Standard Schema

  • Si quieres usarlo directamente sin una biblioteca de esquemas, instala @standard-schema/spec o copia la interfaz para usarla
  • Si un esquema tiene la interfaz estándar, como en la función de ejemplo standardValidate, puede validarse de la misma forma sin importar la biblioteca
  • Si quieres permitir solo validación síncrona, basta con comprobar si el valor de retorno de validate es un Promise y lanzar una excepción

Preguntas frecuentes

  • ¿Hay que agregar la dependencia @standard-schema/spec?: no es obligatorio añadirla como dependencia; puedes copiarla y usarla
  • No puede agregarse solo como dev dependency: como forma parte de la API pública de la biblioteca, debe poder usarse también en el entorno de despliegue real
  • Por qué se usa una tilde (~) antes de ~standard: se busca que aparezca después de otras propiedades en el autocompletado
  • Por qué se usa una clave de texto en lugar de Symbol: porque en TypeScript las claves Symbol pueden causar problemas con el orden del autocompletado o la inferencia de tipos

Aún no hay comentarios.

Aún no hay comentarios.