Masa depan "cerah" dari kegagalan saya

Saya telah menulis perpustakaan validasi data kuartet saya selama satu setengah tahun sekarang. Dan itu bukannya tanpa kegagalan. Keinginan untuk memperbaikinya memaksa saya untuk merilis ulang versi utama dan mengubah arsitekturnya. Dan sekarang selama empat bulan versi mayor terakhir tidak berubah. Tetapi itu juga memiliki kegagalannya sendiri, dan sekarang saya akan mencoba memberi tahu Anda tentang mereka.



Satu-satunya sumber kebenaran dan prinsip KERING



Mari pertimbangkan sebuah contoh:



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


Dalam contoh ini checkPerson, sebuah fungsi, TypeGuard kustom tipe Person.



Kami tidak bisa membantu tetapi memperhatikan pengulangan. Deskripsi validasi mengulangi deskripsi tipe hampir sepenuhnya, tetapi library tidak menjamin dengan cara apa pun bahwa skema yang dijelaskan di dalamnya benar-benar sesuai dengan tipe Person.



Ini bukan masalah yang tidak terpecahkan, ada pustaka yang memiliki properti ini, misalnya io-ts



Dalam masalah ini, saya melihat pilihan antara jaminan dan kenyamanan menulis serta membaca skema validasi. Menurut pendapat saya, yang terakhir lebih disukai. Tapi itu tergantung selera Anda dan biaya kesalahannya.



Jelaskan untuk ketidakabsahan!



Meskipun mekanisme penjelasannya ada, ia tidak bisa membanggakan kemampuannya. Contoh



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


Nah, ini semacam kemelaratan. Penjelasan macam apa ini ??



Mari kita lihat apakah kita melewatkan objek kosong di sana:




checkPerson({})

console.log(checkPerson.explanations)


Outputnya adalah:



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


Ini lebih baik. Tetapi penjelasan ini tidak dapat diserialkan karena schemamerupakan sebuah fungsi.



. , .



.



. -? , .





— - . , - , - — .



Ada banyak hal yang saya suka tentang perpustakaan saya yang saya tulis sebelumnya: singkat dan sederhana , kesamaan dengan Ketikan , kinerja .



Tapi sekarang, saya pikir itu baik untuk menulis tentang apa yang buruk dan tidak cukup baik untuk dibanggakan. Mungkin ada beberapa kekurangan lainnya, saya akan senang mendengar kritik dari komentator. Dan mungkin saya akan melengkapi artikel saya.



Terima kasih sudah membaca




All Articles