0Pricing
TypeScript Academy · Pelajaran

Pernyataan Ganda dan Risikonya

Pahami kapan as unknown as T diperlukan dan alasan penggunaannya berbahaya.

Pernyataan Ganda dan Risikonya 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.

Apa Itu Penegasan Ganda

Penegasan ganda merangkai dua pengubahan tipe as, biasanya melalui unknown: value as unknown as T. Cara ini memaksa konversi yang seharusnya ditolak oleh kompiler.

const s = 'hello';
const n = s as unknown as number; // forced
console.log(typeof n); // still 'string' at runtime!

Mengapa TS Memblokir Konversi Tipe Langsung

TypeScript memblokir s as number ketika string dan number tidak beririsan, karena hal itu hampir pasti merupakan kesalahan. Galat tersebut melindungi Anda dari penegasan yang tidak masuk akal.

const s = 'text';
// const n = s as number; // Error: types do not sufficiently overlap
console.log('Direct unrelated assertion is rejected');

Bagaimana unknown Membuka Konversi Tipe

Setiap tipe dapat ditetapkan ke unknown, dan unknown dapat ditegaskan menjadi apa pun. Melewatkan nilai melalui tipe ini memenuhi aturan irisan dalam dua langkah, sehingga pemeriksaan keamanan dilewati sepenuhnya.

const s = 'text';
const step1 = s as unknown; // always allowed
const step2 = step1 as number; // allowed from unknown
console.log(typeof step2);

Penegasan Ganda Memberikan Informasi Keliru kepada Kompiler

Hasilnya berhasil dikompilasi, tetapi nilai saat berjalan tidak berubah. Anda telah memberi tahu sistem tipe sesuatu yang tidak benar. Kode berikutnya yang memercayai tipe hasil penegasan dapat mengalami kegagalan secara tidak terduga.

const fake = 'oops' as unknown as number;
console.log(fake + 1); // 'oops1' — string concatenation at runtime

Penyalahgunaan yang Realistis

Pengembang terkadang menggunakan penegasan ganda untuk membungkam galat ketika struktur tidak cocok. Ini menyembunyikan kesalahan yang sebenarnya: nilai tersebut tidak pernah memiliki properti yang diklaim.

type User = { id: number; name: string };
const partial = { id: 1 };
const user = partial as unknown as User;
console.log(user.name); // undefined at runtime

Kapan Penegasan Ganda Diperlukan

Terkadang penegasan ganda memang sah—misalnya, untuk menjembatani tipe pustaka yang tidak kompatibel tetapi Anda ketahui kompatibel secara struktural saat berjalan, atau dalam kode tingkat rendah ketika Anda benar-benar mengetahui tata letak memorinya. Kasus-kasus ini jarang terjadi.

// Bridging a known-compatible external type:
type LibA = { value: number };
type LibB = { value: number };
const a: LibA = { value: 5 };
const b = a as unknown as LibB; // structurally identical
console.log(b.value);

Mengapa Ini Merupakan Bau Kode

Penegasan ganda menandakan bahwa Anda mengesampingkan sistem tipe, bukan bekerja dengannya. Setiap penegasan ganda adalah titik ketika kompiler tidak lagi dapat melindungi Anda, sehingga peninjau harus memeriksa setiap kemunculannya dengan saksama.

// Treat 'as unknown as' as a red flag in code review.
const data: unknown = JSON.parse('{}');
// Better: validate with a type guard instead of forcing.
console.log('Prefer validation over double assertion');

Utamakan Validasi

Alih-alih memaksakan tipe, validasikan data dan persempit tipenya. Penjaga tipe membuktikan strukturnya saat berjalan, sehingga Anda memperoleh hasil bertipe yang sama tanpa memberikan informasi keliru kepada kompiler.

type User = { id: number; name: string };
function isUser(v: unknown): v is User {
  return typeof v === 'object' && v !== null &&
    'id' in v && 'name' in v;
}
const raw: unknown = { id: 1, name: 'Sam' };
if (isUser(raw)) console.log(raw.name);

Utamakan Konversi yang Tepat

Jika Anda benar-benar memerlukan tipe saat berjalan yang berbeda, konversikan nilainya, bukan menegaskannya. Konversi mengubah data; penegasan hanya mengubah labelnya.

const s = '42';
const n = Number(s); // real conversion
console.log(n + 1, typeof n);

Dokumentasikan Kasus Valid yang Langka

Jika penegasan ganda benar-benar dapat dibenarkan, tambahkan komentar yang menjelaskan alasan keamanannya. Pengelola kode di masa mendatang perlu mengetahui jaminan saat berjalan yang membuat konversi tipe tersebut valid.

type Raw = { ts: number };
type Event = { ts: number };
const raw: Raw = { ts: 100 };
// Safe: Raw and Event are structurally identical.
const ev = raw as unknown as Event;
console.log(ev.ts);

Ringkasan Pedoman

Aturan praktis: jika Anda menulis as unknown as, berhentilah sejenak dan tanyakan apakah validasi atau konversi akan lebih aman. Sembilan dari sepuluh kali, jawabannya adalah ya.

// Decision: validate? convert? or genuinely bridge identical types?
const input = '7';
const parsed = Number.parseInt(input, 10); // convert, don't force
console.log(parsed);

Pemeriksaan Singkat

Ujilah pemahaman Anda tentang penegasan ganda.

Ringkasan: Penegasan Ganda

Anda telah mempelajari bahwa:

  • value as unknown as T memaksa konversi tipe yang seharusnya ditolak oleh TypeScript.
  • Hal ini berhasil karena unknown beririsan dengan setiap tipe—tetapi tidak mengubah apa pun saat berjalan.
  • Ini adalah bau kode: Anda mengesampingkan sistem tipe dan kehilangan perlindungannya.
  • Utamakan validasi (penjaga tipe) atau konversi nyata.

Selanjutnya, penegasan dibandingkan dengan penjaga tipe secara langsung.

// Validate, don't force:
const raw: unknown = '99';
const n = typeof raw === 'string' ? Number(raw) : 0;
console.log(n);

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pernyataan Ganda dan Risikonya” gratis?

Ya — teks lengkap “Pernyataan Ganda dan Risikonya” 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 “Pernyataan Ganda dan Risikonya”?

Pahami kapan as unknown as T diperlukan dan alasan penggunaannya berbahaya. 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 “Pernyataan Ganda dan Risikonya” 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. Kata Kunci as untuk Pernyataan Jenis
  2. Operator Pernyataan Non-null
  3. Pernyataan Ganda dan Risikonya
  4. Pernyataan versus Pengawal Jenis
← Kembali ke TypeScript Academy