0Pricing
TypeScript Academy · Pelajaran

Pesan Error dalam DSL Tingkat Jenis

Tampilkan error kompilasi yang membantu bagi pengguna DSL.

Pesan Error dalam DSL Tingkat Jenis adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Galat Informatif dalam DSL Tingkat Tipe

Bagian tersulit dari DSL tingkat tipe adalah membuat kegagalan mudah dibaca. Galat mentah berupa never atau "tidak dapat ditetapkan" membingungkan pengguna. Kita dapat menampilkan galat deskriptif menggunakan tipe galat bermerek dan pesan never yang dirancang dengan cermat.

Masalah dengan never

Ketika validasi gagal karena menghasilkan never, kompiler mengatakan "Argumen bertipe X tidak dapat ditetapkan ke never", tetapi pesan ini tidak memberi tahu pengguna mengapa. Kita dapat melakukan yang lebih baik.

Tipe Galat Bermerek

Alih-alih never biasa, kembalikan tipe galat dengan bentuk unik yang membawa string pesan yang mudah dipahami manusia di dalam tipenya.

type TypeError<Msg extends string> = {
  readonly __error: Msg;
};

type E = TypeError<"Column 'foo' does not exist">;

Mengembalikan Galat dari Validasi

Validator mengembalikan tipe nilai yang valid atau galat bermerek yang menjelaskan masalahnya. Pemeriksaan "memiliki titik" adalah pola literal templat (menggunakan tanda aksen terbalik dalam kode sebenarnya); kami menyebutnya HasDot.

// HasDot<S> is the backtick pattern: any text, ".", any text.

type Validate<S extends string> =
  S extends HasDot
    ? S
    : TypeError<"Path must contain a dot, e.g. user.name">;

Memunculkan Galat

Batasi parameter agar meneruskan apa pun yang tidak dapat ditetapkan ke merek galat akan menampilkan pesan tersebut. Tipe galat muncul langsung dalam keluaran kompiler.

declare function path<S extends string>(
  p: Validate<S> extends TypeError<infer M> ? TypeError<M> : S
): void;

path("oops");
// Error message includes: __error: "Path must contain a dot..."

Membedakan Beberapa Galat

Kegagalan yang berbeda mengembalikan pesan yang berbeda, sehingga pengguna memperoleh panduan khusus, bukan satu penolakan umum. HasDot sekali lagi merupakan pola literal templat dengan tanda aksen terbalik untuk "mengandung titik".

type Check<S extends string> =
  S extends "" ? TypeError<"Path cannot be empty">
  : S extends HasDot ? S
  : TypeError<"Missing dot separator">;

never dengan Pendekatan Berbeda

Teknik lain memasangkan posisi nilai dengan pesan literal agar pesan tersebut terlihat saat Anda mengarahkan kursor. Anda mengiriskan tipe yang bermasalah dengan objek berlabel.

type Invalid<M extends string> = { error: M } & never;
// using never keeps it unassignable while the label hints the cause

Galat dalam DSL Berantai

Dalam DSL berantai, buat langkah berikutnya yang tidak valid mengembalikan tipe bermerek galat, bukan tahap yang valid, sehingga editor menampilkan pesan tepat di tempat kesalahan terjadi.

interface Stage {
  // calling done() before where() yields a labeled error
  done(): TypeError<"Call .where() before .done()">;
}

Menjaga Pesan Tetap Singkat

Tipe pesan yang panjang memperbesar keluaran kompiler dan memperlambat perkakas. Utamakan frasa yang ringkas dan dapat ditindaklanjuti. Sertakan token yang bermasalah jika mudah dilakukan, tetapi hindari interpolasi yang sangat besar.

Menguji Galat Anda

Tulislah pengujian tingkat tipe yang memastikan merek galat muncul untuk masukan yang diketahui tidak valid, sehingga refaktor tidak diam-diam menurunkan pengalaman pengembang.

type Expect<T extends true> = T;
type _t = Expect<Validate<"oops"> extends TypeError<any> ? true : false>;

Mengapa Ini Penting

DSL hanya sebaik galatnya. Tipe galat bermerek mengubah kegagalan never yang sulit dipahami menjadi pesan yang menjelaskan dirinya sendiri, sehingga secara drastis meningkatkan pengalaman menggunakan antarmuka pemrograman tingkat tipe Anda.

Pemeriksaan Singkat

Pastikan pemahaman Anda tentang pesan galat tingkat tipe.

Ringkasan

Agar DSL tingkat tipe mudah digunakan, gantilah never polos dengan tipe galat bermerek yang memuat pesan yang mudah dibaca. Validator mengembalikan tipe yang valid atau merek galat tertentu; pembatasan parameter menampilkan pesan tersebut dalam keluaran kompiler. Jaga agar pesan tetap singkat dan lakukan pengujian terhadapnya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pesan Error dalam DSL Tingkat Jenis” gratis?

Ya — teks lengkap “Pesan Error dalam DSL Tingkat Jenis” 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 “Pesan Error dalam DSL Tingkat Jenis”?

Tampilkan error kompilasi yang membantu bagi pengguna DSL. 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 4 dari 4.

Berapa lama pelajaran “Pesan Error dalam DSL Tingkat Jenis” 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