0Pricing
TypeScript Academy · Pelajaran

Tipe brand/opaque untuk mencegah kekeliruan satuan

Cegah kekeliruan satuan/tag dengan menggabungkan tipe dasar dengan properti brand semu; buat hanya melalui fungsi factory.

Tipe brand/opaque untuk mencegah kekeliruan satuan adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 3. 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 3 pelajaran total.

Pengantar

Tujuan: Pisahkan nilai yang tampak serupa pada tingkat tipe. number biasa tidak dapat membedakan meter dari detik; penanda brand dapat melakukannya.

  • Tanpa biaya saat program berjalan
  • API dan refaktor yang lebih aman
  • Buat hanya melalui pabrik

Menandai Satuan Primitif

Penanda memisahkan satuan pada waktu kompilasi; urutan argumen yang salah gagal saat pemeriksaan tipe.

type Meter = number & { readonly __brand: "meter" }
type Second = number & { readonly __brand: "second" }

function meter(n: number): Meter { return n as Meter }
function second(n: number): Second { return n as Second }

const d = meter(100)
const t = second(9)

function speed(dist: Meter, time: Second) { return (dist as number) / (time as number) }

// speed(t, d)  // compile error: brands do not match

Pembantu Penanda Generik

Gunakan pembantu generik Brand di berbagai domain: ID bertipe, token, kursor, dan sebagainya.

type Brand<Tag extends string, T> = T & { readonly __brand: Tag }

type UserId = Brand<"UserId", string>
type OrderId = Brand<"OrderId", string>

function userId(x: string): UserId { return x as UserId }
function orderId(x: string): OrderId { return x as OrderId }

function findUser(id: UserId) { /* ... */ }

const u = userId("u_123")
const o = orderId("o_456")
// findUser(o) // error: OrderId not assignable to UserId

Merek simbol unik

simbol unik mencegah benturan nama dan kebocoran ke ruang nama global.

declare const MeterSym: unique symbol

type Meter2 = number & { readonly [MeterSym]: "meter" }

function asMeter2(n: number): Meter2 { return n as Meter2 }

const m2 = asMeter2(5)
// const wrong: Meter2 = 5  // discourage raw assignment; prefer factories

Pabrik dan validasi

Berikan merek di dalam pabrik: lakukan validasi terlebih dahulu, kemudian beri merek, lalu gunakan. Hindari as sembarangan di lokasi pemanggilan.

type NonEmptyString = string & { readonly __brand: "NonEmpty" }

function nonEmpty(s: string): NonEmptyString | null {
  return s.trim().length > 0 ? (s as NonEmptyString) : null
}

function makeSlug(s: NonEmptyString) {
  return (s as string).toLowerCase().replace(/\s+/g, "-")
}

const ok = nonEmpty(" Hello ")
if (ok) { makeSlug(ok) }  // safe: validated & branded first

Kiat dan hal yang perlu diperhatikan

Praktik terbaik:

  • Gunakan nama merek yang singkat dan bermakna.
  • Sediakan pabrik sebagai satu-satunya cara untuk memperoleh nilai bermerek.
  • Jangan membocorkan merek dalam tipe API publik kecuali diperlukan.
  • Merek hanya berada pada level tipe: tidak ada beban saat runtime.

Pemeriksaan pemberian merek

Pemeriksaan cepat: Pola apa yang mencegah kekeliruan antara unit dan tag?

Ringkasan

Ringkasan: Tipe bermerek atau buram memisahkan nilai yang tampak serupa (meter dan detik, UserId dan OrderId). Hasilkan tipe tersebut melalui pabrik, gunakan di seluruh API, dan hilangkan kekeliruan yang tidak disengaja.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tipe brand/opaque untuk mencegah kekeliruan satuan” gratis?

Ya — teks lengkap “Tipe brand/opaque untuk mencegah kekeliruan satuan” 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 3 pelajaran total.

Apa yang akan aku pelajari di “Tipe brand/opaque untuk mencegah kekeliruan satuan”?

Cegah kekeliruan satuan/tag dengan menggabungkan tipe dasar dengan properti brand semu; buat hanya melalui fungsi factory. 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 1 dari 3.

Berapa lama pelajaran “Tipe brand/opaque untuk mencegah kekeliruan satuan” 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. Tipe brand/opaque untuk mencegah kekeliruan satuan
  2. ID bertag dan pola pemodelan domain
  3. Pemodelan domain — agregat, invarian & layanan
← Kembali ke TypeScript Academy