El futuro "brillante" de mi fracaso

He estado escribiendo mi biblioteca de validación de datos de cuarteto durante un año y medio. Y no fue sin falta. El deseo de arreglarlos me obligó a volver a lanzar versiones principales y cambiar la arquitectura. Y ahora, desde hace cuatro meses, la última versión principal no ha cambiado. Pero también tiene sus propios fallos, y ahora intentaré contarte sobre ellos.



La única fuente de verdad y el principio DRY



Consideremos un ejemplo:



import { v } from 'quartet' // V ... ...Validation

interface Person {
    id: number
    name: string
    age: number
}

const checkPerson = v<Person>({
    id: v.number,
    name: v.string,
    age: v.number,
})


En este ejemplo checkPerson, una función, un TypeGuard personalizado de tipo Person.



No podemos evitar notar las repeticiones. La descripción de validación repite la descripción del tipo casi por completo, pero la biblioteca no garantiza de ninguna manera que el esquema descrito en el interior realmente corresponda al tipo Person.



Este no es un problema insoluble, hay bibliotecas que tienen esta propiedad, por ejemplo io-ts



En este problema, veo una elección entre garantías y la conveniencia de escribir y leer el esquema de validación. En mi opinión, lo último es preferible. Pero eso depende de tus gustos y del costo del error.



¡Explica por invalidez!



Aunque el mecanismo de explicación está presente, no puede presumir de sus habilidades. Ejemplo



import { e as v } from 'quartet' // E ... ...Explanatory

const checkPerson = v<Person>({
    id: v.number, 
    name: v.string, 
    age: v.number,
})

checkPerson(null) // => false
console.log(checkPerson.explanations) // []


Bueno, esto es una especie de miseria. ¿Qué tipo de explicación es esta?



Veamos si pasamos un objeto vacío allí:




checkPerson({})

console.log(checkPerson.explanations)


La salida será:



[{ value: undefined, schema: '[Function: number]', id: 'value.id' }]


Esto es mejor. Pero esta explicación no es serializable porque schemaes una función.



. , .



.



. -? , .





— - . , - , - — .



Hay muchas cosas que me gustan de mi biblioteca sobre las que escribí anteriormente: brevedad y simplicidad , similitud con Typecript , rendimiento .



Pero ahora, pensé que era bueno escribir sobre lo que salió mal y no lo suficientemente bueno como para estar orgulloso. Probablemente haya otras deficiencias, me alegrará escuchar las críticas de los comentaristas. Y quizás complemente mi artículo.



Gracias por leer




All Articles