0Pricing
TypeScript Academy · Pelajaran

Inferensi Jenis yang Sadar Lokasi

Pastikan semua lokasi memiliki struktur kunci yang sama.

Inferensi Jenis yang Sadar Lokasi 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.

Inferensi Tipe Berbasis Lokal

Sebuah aplikasi menyediakan banyak lokal (en, tr, de...). Kita menginginkan tipe yang menghasilkan galat ketika lokal mana pun tidak memiliki kunci yang ada di lokal dasar, sehingga terjemahan tidak pernah diam-diam tidak sinkron.

Lokal Dasar

Pilih satu lokal (biasanya en) sebagai struktur kunci kanonis. Setiap lokal lainnya harus mengikuti bentuknya.

const en = {
  greeting: "Hello",
  cart: { empty: "Empty", checkout: "Checkout" },
} as const;

type Base = typeof en;

Membatasi Lokal Lain

Beri tipe pada setiap lokal tambahan sebagai bentuk dasar. Kunci yang hilang kini menjadi galat kompilasi dalam berkas lokal tersebut.

const tr: Base = {
  greeting: "Merhaba",
  cart: { empty: "Bo\u015f", checkout: "\u00d6deme" },
};
// Omitting cart.checkout -> Error: property missing

Menangkap Kunci Tambahan Juga

Menggunakan tipe dasar sebagai anotasi juga menandai kunci yang tidak dikenal yang ada di suatu lokal tetapi tidak ada di lokal dasar, sehingga entri yang tersisa atau salah ketik dapat ditemukan.

const de: Base = {
  greeting: "Hallo",
  cart: { empty: "Leer", checkout: "Kasse" },
  extra: "oops", // Error: not in Base
};

Pembantu untuk Mendefinisikan Lokal

Pembantu generik menegakkan bentuk tersebut sambil mempertahankan setiap nilai, sehingga definisi per lokal memiliki tempat yang jelas.

function defineLocale<T extends Base>(loc: T): T {
  return loc;
}

const fr = defineLocale({
  greeting: "Bonjour",
  cart: { empty: "Vide", checkout: "Paiement" },
});

Registri Semua Lokal

Kumpulkan lokal dalam sebuah rekaman. Membatasi setiap nilai ke Base menjamin struktur yang seragam di seluruh aplikasi.

const locales: Record<string, Base> = { en, tr, de: fr };
// every entry must have the full Base key structure

Kesetaraan Tingkat Tipe (Mendalam)

Untuk jaminan yang lebih ketat, Anda dapat membuat tipe SameKeys yang membandingkan struktur kunci secara mendalam dan menghasilkan tipe galat jika keduanya berbeda, melampaui hal-hal yang dapat ditangkap oleh anotasi biasa.

type SameKeys<A, B> =
  keyof A extends keyof B
    ? keyof B extends keyof A ? true : false
    : false;

Menurunkan Kunci Sekali

Karena semua lokal berbagi Base, tipe jalur kunci (dari pelajaran sebelumnya) dihitung sekali dari Base dan digunakan kembali untuk setiap lokal, sehingga pengetikan t tidak bergantung pada lokal.

type Key = LeafPaths<Base>;
// same valid keys regardless of active locale

Pemilihan Lokal Saat Waktu Berjalan

Saat waktu berjalan, Anda mengindeks registri berdasarkan lokal aktif; sistem tipe sudah menjamin bahwa setiap lokal memiliki kunci yang sama, sehingga pencarian aman.

function translate(locale: keyof typeof locales, key: Key): string {
  return getPath(locales[locale], key);
}

Mendeteksi Kunci yang Hilang di Seluruh Lokal

Jika Anda tidak dapat memberi anotasi langsung pada setiap berkas (misalnya, impor JSON), pemeriksaan tipe saat pembuatan membandingkan setiap lokal yang diimpor dengan Base dan menampilkan tipe perbedaan yang mencantumkan kunci yang hilang.

type Missing<L> = Exclude<keyof Base, keyof L>;
type TrMissing = Missing<typeof tr>; // never if complete

Mengapa Ini Penting

i18n tanpa tipe mudah menyimpang: kunci yang ditambahkan ke en terlupakan di de, sehingga aplikasi mengirimkan teks kosong atau berbahasa Inggris. Membatasi setiap lokal ke dasar bersama mengubah kelalaian tersebut menjadi galat kompilasi, sehingga semua lokal tetap lengkap dan konsisten.

Uji Cepat

Pastikan pemahaman Anda tentang inferensi berbasis lokal.

Ringkasan

Anda memilih lokal dasar sebagai bentuk kanonis dan membatasi setiap lokal lainnya agar mengikutinya, sehingga kunci yang hilang atau tambahan menyebabkan kompilasi gagal. Pembantu defineLocale dan registri yang dibatasi menjaga semua lokal tetap identik secara struktural, dan jalur kunci diturunkan sekali dari lokal dasar.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Inferensi Jenis yang Sadar Lokasi” gratis?

Ya — teks lengkap “Inferensi Jenis yang Sadar Lokasi” 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 “Inferensi Jenis yang Sadar Lokasi”?

Pastikan semua lokasi memiliki struktur kunci yang sama. 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 “Inferensi Jenis yang Sadar Lokasi” 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. Menentukan Jenis Kunci Terjemahan
  2. Keamanan Jenis Interpolasi
  3. Pluralisasi dengan Jenis
  4. Inferensi Jenis yang Sadar Lokasi
← Kembali ke TypeScript Academy