TypeScript Academy · Lezione

Inferenza dei tipi consapevole della locale

Verifichi che tutte le locale condividano la stessa struttura di chiavi.

Lezione 4 di 413 passaggi

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 missing

Rilevare 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 structure

Uguaglianza 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 locale

Selezione 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 complete

Perché è 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.

Gratis per iniziare

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

  1. Tipizzare le chiavi di traduzione
  2. Type safety dell’interpolazione
  3. Pluralizzazione con i tipi
  4. Inferenza dei tipi consapevole della locale
← Torna a TypeScript Academy