Inferenza dei tipi consapevole della locale
Verifichi che tutte le locale condividano la stessa struttura di chiavi.
Inferenza dei tipi consapevole della locale è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento TypeScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso TypeScript Academy include 4 lezioni in totale.
Inferenza dei tipi consapevole dell'impostazione locale
Un'applicazione supporta più impostazioni locali (en, tr, de...). Vogliamo un tipo che generi un errore quando in un'impostazione locale manca una chiave presente nella base, così le traduzioni non possono perdere silenziosamente la sincronizzazione.
Un'impostazione locale di base
Scelga un'impostazione locale, di solito en, come struttura canonica delle chiavi. Ogni altra impostazione locale deve avere la stessa struttura.
const en = {
greeting: "Hello",
cart: { empty: "Empty", checkout: "Checkout" },
} as const;
type Base = typeof en;Vincolare le altre impostazioni locali
Tipizzi ogni impostazione locale aggiuntiva usando la struttura di base. Una chiave mancante diventa ora un errore di compilazione nel file di quell'impostazione locale.
const tr: Base = {
greeting: "Merhaba",
cart: { empty: "Bo\u015f", checkout: "\u00d6deme" },
};
// Omitting cart.checkout -> Error: property missingRilevare anche le chiavi aggiuntive
Usare il tipo di base come annotazione segnala anche le chiavi sconosciute presenti in un'impostazione locale ma non nella base, permettendo di rilevare voci residue o digitate in modo errato.
const de: Base = {
greeting: "Hallo",
cart: { empty: "Leer", checkout: "Kasse" },
extra: "oops", // Error: not in Base
};Un helper per definire le impostazioni locali
Un helper generico impone la struttura preservando ogni valore e offre un punto di definizione chiaro per ciascuna impostazione locale.
function defineLocale<T extends Base>(loc: T): T {
return loc;
}
const fr = defineLocale({
greeting: "Bonjour",
cart: { empty: "Vide", checkout: "Paiement" },
});Un registro di tutte le impostazioni locali
Raccolga le impostazioni locali in un record. Vincolare ogni valore a Base garantisce una struttura uniforme in tutta l'applicazione.
const locales: Record<string, Base> = { en, tr, de: fr };
// every entry must have the full Base key structureUguaglianza a livello di tipo (profonda)
Per garanzie più rigorose, può creare un tipo SameKeys che confronta in profondità le strutture delle chiavi e restituisce un tipo di errore quando differiscono, andando oltre ciò che rileva una semplice annotazione.
type SameKeys<A, B> =
keyof A extends keyof B
? keyof B extends keyof A ? true : false
: false;Derivare le chiavi una sola volta
Poiché tutte le impostazioni locali condividono Base, il tipo dei percorsi delle chiavi, della lezione precedente, viene calcolato una sola volta a partire da Base e riutilizzato per ogni impostazione locale; in questo modo la tipizzazione di t è indipendente dall'impostazione locale.
type Key = LeafPaths<Base>;
// same valid keys regardless of active localeSelezione dell'impostazione locale a runtime
A runtime si indicizza il registro usando l'impostazione locale attiva; il sistema dei tipi ha già garantito che ogni impostazione locale possieda le stesse chiavi, quindi le ricerche sono sicure.
function translate(locale: keyof typeof locales, key: Key): string {
return getPath(locales[locale], key);
}Rilevare le chiavi mancanti tra le impostazioni locali
Se non può annotare direttamente ogni file, ad esempio per gli import JSON, un controllo dei tipi in fase di build confronta ogni impostazione locale importata con Base e mostra un tipo diff che elenca le chiavi mancanti.
type Missing<L> = Exclude<keyof Base, keyof L>;
type TrMissing = Missing<typeof tr>; // never if completePerché è importante
L'i18n senza tipizzazione perde coerenza: una chiave aggiunta a en viene dimenticata in de, pubblicando una stringa vuota o in inglese. Vincolare ogni impostazione locale a una base condivisa trasforma questa omissione in un errore di compilazione, mantenendo tutte le impostazioni locali complete e coerenti.
Verifica rapida
Verifichi la Sua comprensione dell'inferenza consapevole dell'impostazione locale.
Riepilogo
Ha scelto un'impostazione locale di base come struttura canonica e ha vincolato a essa tutte le altre impostazioni locali, così le chiavi mancanti o aggiuntive impediscono la compilazione. Un helper defineLocale e un registro vincolato mantengono tutte le impostazioni locali strutturalmente identiche, mentre i percorsi delle chiavi vengono derivati una sola volta dalla base.
Impara TypeScript con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 101
- Lezioni
- 352
Domande Frequenti
La lezione «Inferenza dei tipi consapevole della locale» è gratuita?
Sì — il testo completo di «Inferenza dei tipi consapevole della locale» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso TypeScript Academy, passa a CoddyKit PRO. Il corso TypeScript Academy include 4 lezioni in totale.
Cosa imparerò in «Inferenza dei tipi consapevole della locale»?
Verifichi che tutte le locale condividano la stessa struttura di chiavi. Eserciti TypeScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare TypeScript Academy?
Non è richiesta alcuna esperienza precedente. TypeScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Inferenza dei tipi consapevole della locale»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione TypeScript Academy?
Sì. Ogni lezione TypeScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Tipizzare le chiavi di traduzione
- Type safety dell’interpolazione
- Pluralizzazione con i tipi
- Inferenza dei tipi consapevole della locale