0Pricing
TypeScript Academy · Pelajaran

Validasi Input Saat Kompilasi

Tolak ekspresi DSL yang tidak valid sebelum runtime.

Validasi Input Saat Kompilasi adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 4 pelajaran total.

Validasi Masukan Saat Kompilasi

DSL tingkat tipe dapat menolak ekspresi yang cacat sebelum waktu berjalan. Dengan menggunakan tipe literal templat dan tipe kondisional, kita memvalidasi struktur string pada tingkat tipe dan menolak masukan yang tidak valid.

Contoh: Bahasa Pemilih Mini

Bayangkan menerima string seperti "user.name" atau "order.items.length". Kita ingin menolak "user." atau ".name" saat kompilasi.

Mengurai dengan Literal Templat

Tipe literal templat memisahkan string menjadi beberapa bagian menggunakan infer, yang menjadi dasar penguraian saat kompilasi. Pola sebenarnya dibatasi tanda petik balik (Kepala, titik, Ekor dengan inferensi); kita menamai pencocok pemisah tersebut sebagai DotSplit.

// Real TS: backtick pattern matching Head, ".", Tail.

type Split<S extends string> =
  S extends DotSplit<infer Head, infer Tail>
    ? [Head, ...Split<Tail>]
    : [S];

type P = Split<"a.b.c">; // ["a", "b", "c"]

Memvalidasi Setiap Segmen

Tipe kondisional memeriksa bahwa tidak ada segmen yang kosong. Segmen kosong menandai masukan sebagai tidak valid. Pola DotSplit yang sama (literal templat dengan tanda petik balik dalam kode nyata) menggerakkan rekursi.

type NonEmpty<S extends string> = S extends "" ? false : true;

type Valid<S extends string> =
  S extends DotSplit<infer H, infer T>
    ? H extends "" ? false : Valid<T>
    : NonEmpty<S>;

type V1 = Valid<"a.b">;  // true
type V2 = Valid<"a.">;   // false

Membatasi Antarmuka Pemrograman Berdasarkan Validitas

Gunakan tipe validitas untuk membatasi parameter fungsi: string yang valid mempertahankan tipenya; string yang tidak valid menghasilkan never, sehingga pemanggilan gagal dikompilasi.

declare function path<S extends string>(
  p: Valid<S> extends true ? S : never
): void;

path("user.name"); // ok
path("user.");     // Error: argument is never

Menolak Token yang Tidak Dikenal

Anda juga dapat membatasi karakter yang diizinkan. Cocokkan hanya pola segmen yang dikenal; apa pun selain itu menjadi tipe yang menolak.

type Allowed = "user" | "order" | "name" | "items";
type CheckSeg<S extends string> = S extends Allowed ? true : false;

Memvalidasi Operator

Untuk DSL ekspresi seperti "age > 18", cocokkan operator dengan literal templat dan pastikan operator tersebut termasuk dalam himpunan yang diizinkan. Pencocoknya (spasi kiri O spasi kanan) adalah literal templat dengan tanda aksen terbalik dalam kode sebenarnya; kami menyebutnya CondMatch.

type Op = ">" | "<" | "=" | ">=" | "<=";

// Real TS: backtick pattern -> left, " ", infer O, " ", right.
type IsCond<S extends string> =
  S extends CondMatch<infer O>
    ? O extends Op ? true : false
    : false;

type C1 = IsCond<"age > 18">; // true
type C2 = IsCond<"age ! 18">; // false

Menggabungkan Pemeriksaan

Validator nyata menggabungkan beberapa kondisi: segmen yang tidak kosong, token yang diizinkan, dan struktur yang seimbang. Masing-masing adalah tipe kondisional; gabungkan semuanya dengan tipe pembantu bergaya logika.

type And<A, B> = A extends true ? (B extends true ? true : false) : false;

Batas Rekursi

Rekursi tingkat tipe memiliki batas kedalaman. Untuk string yang sangat panjang, kompiler dapat melaporkan galat dengan pesan "instansiasi tipe terlalu dalam". Batasi panjang masukan yang diuraikan atau sederhanakan tata bahasanya.

Lebih Baik daripada Penguraian Saat Program Berjalan

Pengurai saat program berjalan hanya mengeluh ketika string yang salah dievaluasi. Validasi waktu kompilasi menolak literal segera setelah Anda mengetikkannya, dengan umpan balik editor yang lengkap dan tanpa biaya saat program berjalan.

Mengapa Ini Penting

Banyak DSL menerima masukan string (jalur, kueri, format). Memvalidasi strukturnya dalam sistem tipe dapat menemukan salah ketik dan ekspresi yang tidak terbentuk dengan benar sebelum program berjalan, sehingga mengubah sekelompok galat saat program berjalan menjadi galat kompilasi.

Pemeriksaan Singkat

Periksa pemahaman Anda tentang validasi masukan waktu kompilasi.

Ringkasan

Anda memvalidasi masukan DSL sebelum program berjalan dengan mengurai literal string menggunakan tipe literal templat dan infer, lalu memeriksa segmen serta operator menggunakan tipe kondisional. Membatasi parameter fungsi berdasarkan tipe validitas membuat ekspresi yang tidak terbentuk dengan benar menghasilkan never dan gagal dikompilasi, dengan memperhatikan batas rekursi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Validasi Input Saat Kompilasi” gratis?

Ya — teks lengkap “Validasi Input Saat Kompilasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Validasi Input Saat Kompilasi”?

Tolak ekspresi DSL yang tidak valid sebelum runtime. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai TypeScript Academy?

Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Validasi Input Saat Kompilasi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?

Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Apa Itu DSL Tingkat Jenis
  2. Merancang DSL Kueri Fluent
  3. Validasi Input Saat Kompilasi
  4. Pesan Error dalam DSL Tingkat Jenis
← Kembali ke TypeScript Academy