Inferencia de tipos según la configuración regional
Asegúrese de que todas las configuraciones regionales compartan la misma estructura de claves.
Inferencia de tipos según la configuración regional es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.
Inferencia de tipos según el locale
Una aplicación incluye varios locales (en, tr, de...). Queremos un tipo que produzca un error cuando falten en cualquier locale las claves presentes en el locale base, para que las traducciones nunca queden desincronizadas sin avisar.
Un locale base
Elija un locale (normalmente en) como estructura canónica de claves. Todos los demás locales deben coincidir con su forma.
const en = {
greeting: "Hello",
cart: { empty: "Empty", checkout: "Checkout" },
} as const;
type Base = typeof en;Restringir los demás locales
Defina el tipo de cada locale adicional con la forma del locale base. La ausencia de una clave se convierte en un error de compilación en el archivo de ese locale.
const tr: Base = {
greeting: "Merhaba",
cart: { empty: "Bo\u015f", checkout: "\u00d6deme" },
};
// Omitting cart.checkout -> Error: property missingDetectar también las claves adicionales
Usar el tipo base como anotación también marca las claves desconocidas que existen en un locale pero no en el base, lo que permite detectar entradas sobrantes o mal escritas.
const de: Base = {
greeting: "Hallo",
cart: { empty: "Leer", checkout: "Kasse" },
extra: "oops", // Error: not in Base
};Un helper para definir locales
Un helper genérico impone la forma y conserva cada valor, lo que proporciona un lugar de definición claro para cada locale.
function defineLocale<T extends Base>(loc: T): T {
return loc;
}
const fr = defineLocale({
greeting: "Bonjour",
cart: { empty: "Vide", checkout: "Paiement" },
});Un registro de todos los locales
Reúna los locales en un registro. Restringir cada valor a Base garantiza una estructura uniforme en toda la aplicación.
const locales: Record<string, Base> = { en, tr, de: fr };
// every entry must have the full Base key structureIgualdad profunda en el nivel de tipos
Para obtener garantías más estrictas, puede construir un tipo SameKeys que compare las estructuras de claves en profundidad y produzca un tipo de error cuando difieran, superando lo que detecta una anotación simple.
type SameKeys<A, B> =
keyof A extends keyof B
? keyof B extends keyof A ? true : false
: false;Derivar las claves una sola vez
Como todos los locales comparten Base, el tipo de rutas de claves (de la lección anterior) se calcula una sola vez a partir de Base y se reutiliza para cada locale, por lo que el tipado de t es independiente del locale.
type Key = LeafPaths<Base>;
// same valid keys regardless of active localeSelección del locale en tiempo de ejecución
En tiempo de ejecución, accede al registro mediante el locale activo; el sistema de tipos ya garantizó que cada locale tenga las mismas claves, por lo que las búsquedas son seguras.
function translate(locale: keyof typeof locales, key: Key): string {
return getPath(locales[locale], key);
}Detectar claves ausentes entre locales
Si no puede anotar directamente todos los archivos (por ejemplo, al importar archivos JSON), una comprobación de tipos durante la compilación compara cada locale importado con Base y muestra un tipo de diferencia que enumera las claves ausentes.
type Missing<L> = Exclude<keyof Base, keyof L>;
type TrMissing = Missing<typeof tr>; // never if completePor qué es importante
La i18n sin tipos se desincroniza: se añade una clave a en, pero se olvida en de, y se publica una cadena vacía o en inglés. Restringir cada locale a una base compartida convierte esa omisión en un error de compilación y mantiene todos los locales completos y coherentes.
Comprobación rápida
Confirme su comprensión de la inferencia de tipos según el locale.
Resumen
Eligió un locale base como forma canónica y restringió todos los demás locales a ella, de modo que las claves ausentes o adicionales impiden la compilación. Un helper defineLocale y un registro restringido mantienen todos los locales estructuralmente idénticos, y las rutas de claves se derivan una sola vez a partir del locale base.
Preguntas frecuentes
¿La lección «Inferencia de tipos según la configuración regional» es gratis?
Sí — el texto completo de «Inferencia de tipos según la configuración regional» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Inferencia de tipos según la configuración regional»?
Asegúrese de que todas las configuraciones regionales compartan la misma estructura de claves. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar TypeScript Academy?
No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Inferencia de tipos según la configuración regional»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?
Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Tipado de claves de traducción
- Seguridad de tipos en interpolaciones
- Pluralización con tipos
- Inferencia de tipos según la configuración regional