Pluralisasi dengan Jenis
Modelkan bentuk jamak dengan cara yang aman secara jenis.
Pluralisasi dengan Jenis 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.
Pluralisasi yang Aman secara Tipe
Bahasa memerlukan bentuk jamak: "1 item" dibandingkan dengan "2 item". i18n yang aman secara tipe memodelkan kategori jamak (seperti one / other) dan mewajibkan argumen count agar Anda tidak pernah melupakannya.
Kategori Jamak
Aturan pluralisasi Intl mendefinisikan kategori seperti zero, one, two, few, many, other. Bahasa Inggris hanya menggunakan one dan other; lokal lain menggunakan lebih banyak kategori.
type PluralCategory = "zero" | "one" | "two" | "few" | "many" | "other";Bentuk Pesan Jamak
Nyatakan pesan jamak sebagai objek yang menggunakan kategori sebagai kunci. other adalah cadangan wajib.
type PluralMessage = {
other: string;
} & Partial<Record<Exclude<PluralCategory, "other">, string>>;
const items: PluralMessage = {
one: "{count} item",
other: "{count} items",
};Membedakan Pesan Jamak dan Biasa
Sebuah katalog mencampur teks biasa dan objek jamak. Persyaratan argumennya berbeda, jadi kita mendeteksi bentuknya pada tingkat tipe.
type IsPlural<M> = M extends { other: string } ? true : false;Mewajibkan Jumlah
Ketika sebuah pesan berbentuk jamak, argumen penerjemahan harus menyertakan count numerik. Kita menghitung tipe argumennya secara kondisional.
type PluralArgs<M> = IsPlural<M> extends true
? { count: number }
: {};
type A = PluralArgs<typeof items>; // { count: number }Fungsi t Bertipe untuk Bentuk Jamak
Gabungkan pencarian katalog dengan argumen kondisional agar pesan jamak mewajibkan count, sedangkan pesan biasa tidak.
declare const cat: {
items: { one: string; other: string };
hello: string;
};
declare function t<K extends keyof typeof cat>(
key: K,
args: PluralArgs<(typeof cat)[K]>
): string;
t("items", { count: 3 }); // ok
t("items", {}); // Error: count required
t("hello", {}); // okMemilih Bentuk Saat Waktu Berjalan
Saat waktu berjalan, Intl.PluralRules memilih kategori berdasarkan jumlah, lalu Anda membaca teks yang sesuai (dengan cadangan other).
function plural(msg: { other: string; [k: string]: string }, count: number, locale: string) {
const cat = new Intl.PluralRules(locale).select(count);
return (msg[cat] ?? msg.other);
}Menggabungkannya dengan Interpolasi
String jamak biasanya juga berisi {count}. Tipe argumen dapat menggabungkan persyaratan jamak dengan variabel interpolasi yang diekstrak dari bentuk yang dipilih.
type FullArgs<M> = PluralArgs<M> & ExtractVars<M>;
// count plus any {placeholders} in the messageLokal dengan Bentuk Lebih Beragam
Beberapa lokal (misalnya, Polandia dan Rusia) menggunakan few dan many. Karena PluralCategory sudah menyertakannya, katalog dapat menyediakan kunci-kunci tersebut dan mekanisme yang sama akan menanganinya.
const ruItems = {
one: "{count} товар",
few: "{count} товара",
many: "{count} товаров",
other: "{count} товара",
};Menegakkan Cadangan other
Karena other wajib ada dalam PluralMessage, sistem tipe menjamin bahwa cadangan tersedia dan mencegah kasus saat waktu berjalan ketika tidak ada bentuk jamak yang cocok.
Mengapa Ini Penting
Galat jamak ("1 items") dan jumlah yang terlupakan umum terjadi dalam i18n tanpa tipe. Memodelkan kategori sebagai tipe dan mewajibkan count menjadikan pluralisasi yang benar sebagai perilaku bawaan, sedangkan jumlah yang hilang menjadi galat kompilasi.
Uji Cepat
Uji pemahaman Anda tentang pluralisasi yang aman secara tipe.
Ringkasan
Anda memodelkan bentuk jamak sebagai objek dengan kategori jamak sebagai kunci dan cadangan other yang wajib, mendeteksi pesan jamak pada tingkat tipe, serta mewajibkan argumen count numerik melalui tipe kondisional. Intl.PluralRules memilih bentuk saat waktu berjalan, dan mekanisme yang sama dapat diperluas untuk lokal dengan bentuk yang lebih beragam.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pluralisasi dengan Jenis” gratis?
Ya — teks lengkap “Pluralisasi dengan Jenis” 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 “Pluralisasi dengan Jenis”?
Modelkan bentuk jamak dengan cara yang aman secara jenis. 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 “Pluralisasi dengan Jenis” 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
- Menentukan Jenis Kunci Terjemahan
- Keamanan Jenis Interpolasi
- Pluralisasi dengan Jenis
- Inferensi Jenis yang Sadar Lokasi