Standard Schema - Una interfaz común para la validación en TypeScript
(standardschema.dev)- 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
~standardexisten propiedades obligatorias comoversion,vendor,validateytypes - La función
validatedevuelvevaluesi tiene éxito, y un arregloissuessi falla - La propiedad
typespermite 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
~standardpara 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
StandardSchemaV1en tu biblioteca y agrega la propiedad~standard - Conecta la función
validatecon 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/speco 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
validatees unPromisey 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 clavesSymbolpueden causar problemas con el orden del autocompletado o la inferencia de tipos
Aún no hay comentarios.