Seguridad de tipos en interpolaciones
Extraiga y exija las variables de interpolación de las cadenas.
Seguridad de tipos en interpolaciones es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 2 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.
Interpolación con seguridad de tipos
Los mensajes suelen contener marcadores de posición como "Hello, {name}". La i18n con seguridad de tipos extrae los nombres de esos marcadores de posición del tipo de cadena del mensaje y exige que pase argumentos coincidentes.
El objetivo
Dado el tipo literal de un mensaje, queremos calcular el objeto de variables que necesita, de modo que se exija t("greet", { name: "Ada" }) y la ausencia de name provoque un error de compilación.
Extracción de un marcador de posición
Un tipo condicional de literal de plantilla extrae el nombre de la variable de una cadena con un único marcador de posición. En el código real, el patrón se escribe con comillas invertidas como: string, llave de apertura, infer V, llave de cierre, string. A continuación representamos ese comparador como BraceMatch.
// Real TS pattern (backtick template literal):
// matches any text, then {V}, then any text; infers V.
type Var<S extends string> =
S extends BraceMatch<infer V> ? V : never;
type A = Var<"Hello, {name}">; // "name"Extracción de varios marcadores de posición
Recursivamente, recopile todos los marcadores de posición en una unión. El patrón captura una variable y la cola restante, y después vuelve a aplicar la recursión a esa cola.
// Pattern: any text, {V}, then Rest tail -- infer V and Rest.
type Vars<S extends string> =
S extends BraceMatchRest<infer V, infer Rest>
? V | Vars<Rest>
: never;
type B = Vars<"Hi {first} {last}!">; // "first" | "last"De nombres a un objeto de argumentos
Convierta la unión de nombres en un tipo de objeto obligatorio mediante un tipo mapeado.
type ArgsOf<S extends string> = {
[K in Vars<S>]: string | number;
};
type G = ArgsOf<"Hello, {name}">;
// { name: string | number }Sin marcadores de posición, no hay argumentos
Cuando un mensaje no tiene marcadores de posición, Vars es never, por lo que el objeto de argumentos está vacío. En ese caso, puede hacer que el parámetro de argumentos sea opcional.
type C = Vars<"Goodbye">; // never
type D = ArgsOf<"Goodbye">; // {} (empty)Una función de traducción con tipos
Haga que el parámetro de argumentos dependa de la clave elegida; para ello, busque el literal del mensaje y calcule sus argumentos.
declare const messages: {
greet: "Hello, {name}";
invite: "Join {count} others";
};
declare function t<K extends keyof typeof messages>(
key: K,
args: ArgsOf<(typeof messages)[K]>
): string;La comprobación en acción
El compilador exige ahora las variables exactas que declara cada mensaje.
t("greet", { name: "Ada" }); // ok
t("greet", {}); // Error: name is missing
t("invite", { count: 3 }); // ok
t("invite", { name: "x" }); // Error: count missing, name unexpectedArgumentos opcionales para mensajes simples
Utilice una sobrecarga condicional para que los mensajes sin marcadores de posición no requieran un segundo argumento.
type MaybeArgs<S extends string> =
Vars<S> extends never ? [] : [args: ArgsOf<S>];
declare function t2<K extends keyof typeof messages>(
key: K,
...rest: MaybeArgs<(typeof messages)[K]>
): string;Delimitadores personalizados
Si su catálogo utiliza {{name}} o %{name}, ajuste el patrón de literal de plantilla en Vars según corresponda. La técnica es la misma; solo cambia el literal que lo rodea.
Por qué es importante
Las variables de interpolación ausentes o mal escritas son una fuente clásica de cadenas de interfaz rotas ("Hello, undefined"). Extraerlas en el nivel de tipos convierte estos casos en errores de compilación y documenta el contrato de cada mensaje.
Comprobación rápida
Ponga a prueba su comprensión de la seguridad de tipos en la interpolación.
Resumen
Al hacer coincidencias de patrones con los tipos literales de los mensajes mediante literales de plantilla y infer, extrae los nombres de los marcadores de posición en una unión, los asigna a un objeto de argumentos obligatorio y hace que la función de traducción exija exactamente esas variables, con argumentos opcionales cuando no haya ninguna.
Preguntas frecuentes
¿La lección «Seguridad de tipos en interpolaciones» es gratis?
Sí — el texto completo de «Seguridad de tipos en interpolaciones» 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 «Seguridad de tipos en interpolaciones»?
Extraiga y exija las variables de interpolación de las cadenas. 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 2 de 4.
¿Cuánto tiempo toma la lección «Seguridad de tipos en interpolaciones»?
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