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