19 poin oleh xguru 2025-02-06 | Belum ada komentar. | Bagikan ke WhatsApp
  • Spesifikasi yang dirancang agar library skema berbasis JavaScript/TypeScript mengimplementasikan antarmuka umum
  • Tujuannya adalah memungkinkan logika validasi tipe yang didefinisikan pengguna dapat digunakan ulang di berbagai library, sehingga tool dapat saling kompatibel tanpa adaptor terpisah
  • Dirancang bersama oleh para pembuat library utama seperti Zod, Valibot, dan ArkType

Antarmuka utama (StandardSchemaV1)

  • Seluruh spesifikasi diimplementasikan melalui properti objek bernama ~standard
  • Di dalam ~standard terdapat properti wajib seperti version, vendor, validate, dan types
  • Fungsi validate mengembalikan value saat berhasil, dan array issues saat gagal
  • Melalui properti types, TypeScript dapat menginfer tipe input (input) dan output (output) dari skema
  • Semua pembaruan akan menjaga kompatibilitas selama bukan perubahan versi mayor

Tujuan desain

  • Dukungan validasi runtime: informasi error distandardisasi dan dikirimkan dengan cara yang konsisten
  • Dukungan inferensi tipe statis: informasi tipe yang diinferensikan oleh library berbasis TypeScript diekspos secara eksplisit
  • Kesederhanaan: dapat diimplementasikan hanya dengan menambahkan beberapa baris pada fungsi library yang sudah ada
  • Menghindari benturan API: semua isi ditempatkan hanya dalam satu namespace ~standard agar tidak bertabrakan dengan API yang sudah ada
  • Menjaga pengalaman pengembang: diawali dengan tilde (~) seperti ~standard agar prioritasnya lebih rendah dalam autocomplete

Library mana saja yang mengimplementasikannya

  • Standard Schema sudah didukung oleh Zod, Valibot, ArkType, Arri Schema, TypeMap, dan lainnya
  • tRPC, TanStack Form, TanStack Router, Hono Middleware, dan lainnya juga menerima skema pengguna berdasarkan Standard Schema

Cara mengimplementasikan spesifikasi ini di library Anda

  • Salin antarmuka StandardSchemaV1 ke library lalu tambahkan properti ~standard
  • Hubungkan fungsi validate ke fungsi validasi yang sudah ada agar mengembalikan { value } saat berhasil dan { issues } saat gagal
  • Jika diperlukan, validasi asinkron juga dimungkinkan, tetapi validasi sinkron direkomendasikan

Cara menerima skema buatan pengguna dengan Standard Schema

  • Jika ingin menggunakannya langsung tanpa library skema, instal @standard-schema/spec atau salin antarmukanya untuk digunakan
  • Seperti pada contoh fungsi standardValidate, jika sebuah skema memiliki antarmuka standar, validasi dapat dilakukan dengan cara yang sama apa pun library-nya
  • Jika hanya ingin mengizinkan validasi sinkron, cukup periksa apakah nilai balik validate adalah Promise lalu tangani sebagai pengecualian

FAQ

  • Apakah perlu menambahkan dependensi @standard-schema/spec?: Tidak wajib ditambahkan sebagai dependensi, dan bisa digunakan dengan menyalinnya
  • Tidak bisa ditambahkan sebagai dev dependency: karena ini menjadi bagian dari API publik library, maka harus dapat digunakan juga di lingkungan distribusi nyata
  • Alasan menggunakan tilde (~) di depan ~standard: agar muncul setelah properti lain dalam autocomplete
  • Alasan menggunakan key string alih-alih Symbol: karena key Symbol di TypeScript dapat menimbulkan masalah pada pengurutan autocomplete maupun inferensi tipe

Belum ada komentar.

Belum ada komentar.