0Pricing
TypeScript Academy · Pelajaran

Penyempitan dengan instanceof dan in

Persempit instance class dan bentuk objek.

Penyempitan dengan instanceof dan in adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Selamat Datang

`instanceof` menyempitkan tipe instans kelas, sedangkan `in` menyempitkan tipe objek berdasarkan keberadaan properti. Keduanya penting untuk menangani gabungan yang kompleks.

Penyempitan dengan instanceof

Gunakan `instanceof` untuk memeriksa apakah suatu nilai merupakan instans kelas. TypeScript menyempitkan tipe tersebut menjadi kelas itu.
function handle(err: Error | string) {
  if (err instanceof Error) {
    console.log(err.message); // err: Error
  } else {
    console.log(err); // err: string
  }
}

instanceof dengan Kelas Kustom

instanceof juga berfungsi dengan kelas yang Anda buat sendiri.
class Dog { bark() { return 'Woof'; } }
class Cat { meow() { return 'Meow'; } }
function speak(pet: Dog | Cat) {
  if (pet instanceof Dog) pet.bark();
  else pet.meow();
}

instanceof Tidak Berfungsi dengan Antarmuka

Antarmuka dihapus saat eksekusi. Anda tidak dapat menggunakan instanceof dengan antarmuka—hanya dengan kelas.

Operator in

Gunakan `in` untuk memeriksa apakah suatu properti ada pada objek. TypeScript menyempitkan gabungan menjadi anggota yang memiliki properti tersebut.
type Fish = { swim(): void };
type Bird = { fly(): void };
function move(animal: Fish | Bird) {
  if ('swim' in animal) animal.swim();
  else animal.fly();
}

Penyempitan in dengan Properti Opsional

`in` juga menyempitkan tipe untuk properti opsional—tipe menyempit menjadi anggota gabungan yang CAN memiliki properti tersebut.
type A = { x?: number };
type B = { y: number };
function process(v: A | B) {
  if ('x' in v) {
    // v: A (has optional x)
  }
}

Menggabungkan instanceof dan in

Anda dapat menggabungkan kedua teknik penyempitan untuk membedakan tipe yang kompleks.
function describe(v: Error | { message: string }) {
  if (v instanceof Error) console.log('Error:', v.stack);
  else if ('message' in v) console.log('Object:', v.message);
}

in untuk Gabungan dengan Pembeda

Ketika anggota gabungan tidak memiliki pembeda, pemeriksaan `in` dapat digunakan untuk tujuan penyempitan yang sama.
type Square = { side: number };
type Circle = { radius: number };
function area(s: Square | Circle): number {
  return 'side' in s ? s.side ** 2 : Math.PI * s.radius ** 2;
}

instanceof dalam Blok catch

Gunakan instanceof dalam blok catch untuk membedakan tipe kesalahan.
try {
  await fetchData();
} catch (err) {
  if (err instanceof NetworkError) { /* retry */ }
  else if (err instanceof AuthError) { /* redirect */ }
  else throw err;
}

Pemeriksaan Object.prototype vs in

Baik `key in obj` maupun `Object.prototype.hasOwnProperty.call(obj, key)` memeriksa keberadaan properti, tetapi `in` juga mencocokkan properti yang diwarisi.

Prioritas Penyempitan

Ketika beberapa pemeriksaan penyempitan berlaku, TypeScript mengiris tipe-tipe yang telah disempitkan sehingga menghasilkan tipe yang paling spesifik.

Pemeriksaan Cepat

Mengapa Anda tidak dapat menggunakan `instanceof` untuk menyempitkan tipe antarmuka dalam TypeScript?

Ringkasan

`instanceof` menyempitkan instans kelas saat eksekusi. `in` menyempitkan gabungan objek berdasarkan keberadaan properti. Gunakan keduanya saat menangani hierarki kelas dan gabungan objek struktural.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Penyempitan dengan instanceof dan in” gratis?

Ya — teks lengkap “Penyempitan dengan instanceof dan in” 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 “Penyempitan dengan instanceof dan in”?

Persempit instance class dan bentuk objek. 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 2 dari 4.

Berapa lama pelajaran “Penyempitan dengan instanceof dan in” 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. Penyempitan dengan typeof dan Kebenaran
  2. Penyempitan dengan instanceof dan in
  3. Fungsi Penjaga Tipe Buatan Pengguna
  4. Pemeriksaan Kelengkapan dengan never
← Kembali ke TypeScript Academy