0Pricing
TypeScript Academy · Pelajaran

Menghilangkan any; mengutamakan unknown + penyempitan

Ganti any dengan unknown + penyempitan; tambahkan penjaga kecil dan fungsi assertion; aktifkan bendera keketatan secara bertahap tanpa merusak build.

Menghilangkan any; mengutamakan unknown + penyempitan adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 2. 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 2 pelajaran total.

Pengantar

Tujuan: Hilangkan bagian yang menggunakan any. Utamakan unknown untuk nilai yang tidak tepercaya dan persempit tipenya dengan pemeriksaan sederhana. Anda akan menambahkan penjaga kecil dan mengaktifkan opsi ketat secara bertahap.

  • any → unknown
  • Penyempitan dengan typeof/in/instanceof
  • Fungsi penegasan

Kelemahan any

any menonaktifkan keamanan: bentuk yang salah atau operasi aritmetika pada string dapat lolos saat kompilasi, lalu gagal setelahnya.

// any hides bugs
function avgBad(values: any): number {
  // Compiles even if values is not an array of numbers
  return values.reduce((a: number, b: number) => a + b, 0) / values.length
}

// Runtime crash examples:
// avgBad(123)
// avgBad(["1","2"]) // string addition!

unknown + penyempitan tipe

Gunakan unknown untuk input dari luar. Persempit tipenya dengan Array.isArray dan typeof, lalu lakukan perhitungan dengan aman.

// unknown forces checks
function avg(values: unknown): number {
  if (!Array.isArray(values)) throw new Error("values must be an array")
  const nums = values.filter((v): v is number => typeof v === "number")
  if (nums.length === 0) throw new Error("no numbers")
  const sum = nums.reduce((a, b) => a + b, 0)
  return sum / nums.length
}

// avg([1,2,3]) → 2; avg("oops") throws early with a clear message

Penjaga tipe

Buat predikat x is T agar tipe pemanggil dapat dipersempit dengan rapi. Buat penjaga tetap kecil dan berfokus pada pemeriksaan struktur.

// Small predicate to reuse narrowing
export type User = { id: string; name: string }

export function isUser(x: unknown): x is User {
  return typeof x === "object" && x !== null
    && typeof (x as any).id === "string"
    && typeof (x as any).name === "string"
}

export function hello(x: unknown) {
  if (!isUser(x)) throw new Error("invalid user")
  return `Hello, ${x.name}`
}

Fungsi penegasan

Fungsi penegasan (asserts x is T) mempersempit tipe setelah dijalankan. Gunakan untuk prasyarat wajib dan lemparkan error dengan pesan yang jelas.

// Assertion function throws or narrows
function assertUser(x: unknown): asserts x is { id: string; name: string } {
  if (typeof x !== "object" || x === null) throw new Error("not an object")
  const o = x as Record<string, unknown>
  if (typeof o.id !== "string" || typeof o.name !== "string") throw new Error("bad user")
}

export function greetUnsafe(x: unknown) {
  assertUser(x) // now x is narrowed after this call
  return `Hi ${x.name}`
}

Rencana keketatan

Rencana:

  • Aktifkan noImplicitAny dan perbaiki kesalahan baru terlebih dahulu.
  • Perkenalkan penjaga untuk input eksternal.
  • Aktifkan strictNullChecks dan tangani undefined secara eksplisit.
  • Lacak penggunaan any yang tersisa dengan ESLint dan kurangi seiring waktu.

Pemeriksaan unknown vs any

Pemeriksaan singkat: Mengapa unknown lebih disukai daripada any untuk data yang tidak tepercaya?

Ringkasan

Ringkasan: Ganti any dengan unknown, tambahkan penjaga atau penegasan kecil, dan tingkatkan opsi ketat secara bertahap agar build tetap berhasil.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menghilangkan any; mengutamakan unknown + penyempitan” gratis?

Ya — teks lengkap “Menghilangkan any; mengutamakan unknown + penyempitan” 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 2 pelajaran total.

Apa yang akan aku pelajari di “Menghilangkan any; mengutamakan unknown + penyempitan”?

Ganti any dengan unknown + penyempitan; tambahkan penjaga kecil dan fungsi assertion; aktifkan bendera keketatan secara bertahap tanpa merusak build. 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 2.

Berapa lama pelajaran “Menghilangkan any; mengutamakan unknown + penyempitan” 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. Menghilangkan any; mengutamakan unknown + penyempitan
  2. Menerapkan flag ketat secara bertahap
← Kembali ke TypeScript Academy