Çeviri Anahtarlarının Türünü Belirleme
Mesaj dosyalarından geçerli anahtarların birleşimini türetin.
Çeviri Anahtarlarının Türünü Belirleme, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.
Geçerli Çeviri Anahtarlarını Türetme
Tür güvenli bir i18n düzeninde geçerli çeviri anahtarları kümesi messages nesnenizden türetilir. t("greetng") gibi bir yazım hatası, çalışma zamanında eksik dize hatası olmak yerine derleme hatasına dönüşür.
Bir messages Nesnesi
Düz bir messages nesnesiyle başlayın. Bu nesne, hem değerler hem de anahtar türü için tek doğruluk kaynağıdır.
const messages = {
greeting: "Hello",
farewell: "Goodbye",
cart: {
empty: "Your cart is empty",
checkout: "Proceed to checkout",
},
} as const;keyof ile Üst Düzey Anahtarlar
Düz bir nesne için keyof typeof, anahtarların birleşimini verir.
type TopKeys = keyof typeof messages;
// "greeting" | "farewell" | "cart"İç İçe Yapı Sorunu
Gerçek mesaj katalogları iç içe yapıdadır. Yalnızca üst düzey anahtarları değil, "cart.empty" gibi noktalı yolları da istiyoruz. Nesne boyunca dolaşan özyinelemeli bir türe ihtiyacımız var.
Özyinelemeli Yol Türü
Koşullu ve eşlenmiş bir tür, iç içe nesnelere özyinelemeli olarak girip anahtarlara önek ekleyerek noktalı yollar oluşturur. Önek, gerçek kodda backtick'lerle yazılan bir şablon dizesi türü kullanır: [backtick]${K}.${Paths<T[K]>}[backtick]. Listeyi anlaşılır tutmak için bunu aşağıda JoinPath(K, child) olarak gösteriyoruz.
type JoinPath<K extends string, Rest extends string> = K + "." + Rest;
// (Real TS uses a template literal type:
// the K dot Rest pattern delimited by backticks.)
type Paths<T> = {
[K in keyof T & string]: T[K] extends string
? K
: K | (T[K] extends object
? JoinPath<K, Paths<T[K]>>
: never);
}[keyof T & string];Uygulama
messages türünü Paths'e vermek, geçerli tüm noktalı anahtarları üretir.
type MsgKey = Paths<typeof messages>;
// "greeting" | "farewell" | "cart" | "cart.empty" | "cart.checkout"Yalnızca Yaprak Anahtarlar
Çoğu zaman yalnızca yaprak yolları, yani gerçek dizeleri, istersiniz; ara nesneleri dışarıda bırakabilirsiniz. Özyinelemeyi, dize olmayan düğümleri atlayacak şekilde düzenleyin. K-nokta-alt öneki de yine bir şablon dizesi türü kullanır (gerçek kodda backtick'lerle sınırlandırılır); burada JoinPath olarak gösterilmiştir.
type LeafPaths<T> = T extends string
? ""
: {
[K in keyof T & string]: T[K] extends string
? K
: JoinPath<K, LeafPaths<T[K]>>;
}[keyof T & string];
// "greeting" | "farewell" | "cart.empty" | "cart.checkout"Tür Güvenli t İşlevi
Çeviri işlevinin parametresini türetilmiş anahtar birleşimiyle sınırlandırarak yalnızca geçerli anahtarların derlenmesini sağlayın.
declare function t(key: LeafPaths<typeof messages>): string;
t("cart.empty"); // ok
t("cart.missing"); // Error: not a valid keyDeğer Türünü Çözümleme
Daha ileri giderek bir yoldaki değer türünü çıkarabilirsiniz; bu, mesajlarda dize olmayan girdiler bulunduğunda kullanışlıdır. Yol dizinleyen koşullu bir tür, noktalar boyunca ilerler. Yolu, gerçek kodda backtick'lerle Head nokta Rest biçiminde ve infer kullanarak yazılan bir şablon dizesi deseniyle böler. Bu bölmeyi aşağıda SplitHead/SplitRest olarak gösteriyoruz.
// Conceptually: split "cart.empty" into Head="cart", Rest="empty"
// using a template literal pattern with infer.
type ValueAt<T, P extends string> =
P extends SplitHead<infer Head, infer Rest>
? Head extends keyof T ? ValueAt<T[Head], Rest> : never
: P extends keyof T ? T[P] : never;as const Neden Önemlidir
as const olmadan dize değerleri string türüne genişler ve daha sonra gereken değişmez bilgi kaybolur (örneğin yer tutucu çıkarımı için). Katalogları her zaman const olarak tanımlayın.
Bu Neden Önemlidir
Anahtarları katalogdan türetmek, bir mesajın eklenmesinin, yeniden adlandırılmasının veya kaldırılmasının her yerde izin verilen anahtar türünü anında güncellemesi anlamına gelir. Sürdürülecek merkezi bir numaralandırma yoktur, güncelliğini yitirmiş dize sabitleri yoktur.
Kısa Kontrol
Çeviri anahtarlarını türlendirmeyi anlayıp anlamadığınızı doğrulayın.
Özet
keyof ile birlikte özyinelemeli bir şablon dizesi yol türü kullanarak bir messages nesnesinden geçerli anahtarların birleşimini türettiniz. Yalnızca yaprakları içeren çeşitlemeler ara nesneleri dışarıda bırakır, türü belirtilmiş bir t geçersiz anahtarları reddeder ve as const tür mekanizmasının ihtiyaç duyduğu değişmez bilgiyi korur.
Sıkça Sorulan Sorular
“Çeviri Anahtarlarının Türünü Belirleme” dersi ücretsiz mi?
Evet — “Çeviri Anahtarlarının Türünü Belirleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.
“Çeviri Anahtarlarının Türünü Belirleme” dersinde ne öğreneceğim?
Mesaj dosyalarından geçerli anahtarların birleşimini türetin. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Çeviri Anahtarlarının Türünü Belirleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Çeviri Anahtarlarının Türünü Belirleme
- Enterpolasyon Tür Güvenliği
- Türlerle Çoğullaştırma
- Yerel Ayara Duyarlı Tür Çıkarımı