O futuro "brilhante" do meu fracasso

Estou escrevendo minha biblioteca de validação de dados de quarteto há um ano e meio. E não foi sem falhas. O desejo de consertá-los me forçou a relançar as versões principais e mudar a arquitetura. E agora, há quatro meses, a última versão principal não mudou. Mas também tem suas próprias falhas, e agora tentarei falar sobre elas.



A única fonte da verdade e o princípio DRY



Vamos considerar um exemplo:



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,
})


Neste exemplo checkPerson, uma função, um TypeGuard personalizado do tipo Person.



Não podemos deixar de notar as repetições. A descrição da validação repete a descrição do tipo quase completamente, mas a biblioteca não garante de forma alguma que o esquema descrito dentro realmente corresponda ao tipo Person.



Este não é um problema insolúvel, existem bibliotecas que possuem esta propriedade, por exemplo io-ts



Neste problema, vejo uma escolha entre garantias e a conveniência de escrever e ler o esquema de validação. Em minha opinião, o último é preferível. Mas isso depende de seus gostos e do custo do erro.



Explique a invalidez!



Embora haja um mecanismo de explicação, ele não pode se gabar de suas habilidades. Exemplo



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) // []


Bem, isso é algum tipo de miséria. Que tipo de explicação é essa ??



Vamos ver se passamos um objeto vazio lá:




checkPerson({})

console.log(checkPerson.explanations)


O resultado será:



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


Isto é melhor. Mas essa explicação não é serializável porque schemaé uma função.



. , .



.



. -? , .





— - . , - , - — .



Há muitas coisas de que gosto em minha biblioteca sobre as quais escrevi anteriormente: brevidade e simplicidade , semelhança com o Typescript , desempenho .



Mas agora, eu pensei que era bom escrever sobre o que deu errado e não bom o suficiente para me orgulhar. Provavelmente, existem algumas outras desvantagens, terei prazer em ouvir críticas dos comentaristas. E talvez eu complemente meu artigo.



Obrigado pela leitura




All Articles