Pluralización con tipos
Modele formas plurales de manera segura respecto a los tipos.
Pluralización con tipos es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 3 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.
Pluralización con seguridad de tipos
Los idiomas necesitan formas plurales: «1 elemento» frente a «2 elementos». La i18n con seguridad de tipos modela las categorías de pluralización (como one / other) y exige un argumento count para que nunca se olvide.
Categorías de pluralización
Las reglas de pluralización de Intl definen categorías como zero, one, two, few, many, other. El inglés solo usa one y other; otros locales usan más.
type PluralCategory = "zero" | "one" | "two" | "few" | "many" | "other";Estructura de un mensaje plural
Represente un mensaje pluralizado como un objeto cuyas claves sean categorías. other es el valor de respaldo obligatorio.
type PluralMessage = {
other: string;
} & Partial<Record<Exclude<PluralCategory, "other">, string>>;
const items: PluralMessage = {
one: "{count} item",
other: "{count} items",
};Distinguir entre mensajes plurales y simples
Un catálogo combina cadenas simples y objetos plurales. Los requisitos de argumentos son distintos, así que detectamos la estructura en el nivel de tipos.
type IsPlural<M> = M extends { other: string } ? true : false;Exigir count
Cuando un mensaje es plural, los argumentos de traducción deben incluir un count numérico. Calculamos condicionalmente el tipo de argumentos.
type PluralArgs<M> = IsPlural<M> extends true
? { count: number }
: {};
type A = PluralArgs<typeof items>; // { count: number }Una t tipada para plurales
Combine la búsqueda en el catálogo con los argumentos condicionales para que los mensajes plurales exijan count y los simples no.
declare const cat: {
items: { one: string; other: string };
hello: string;
};
declare function t<K extends keyof typeof cat>(
key: K,
args: PluralArgs<(typeof cat)[K]>
): string;
t("items", { count: 3 }); // ok
t("items", {}); // Error: count required
t("hello", {}); // okSeleccionar la forma en tiempo de ejecución
En tiempo de ejecución, Intl.PluralRules selecciona la categoría a partir del recuento y usted lee la cadena correspondiente (con other como valor de respaldo).
function plural(msg: { other: string; [k: string]: string }, count: number, locale: string) {
const cat = new Intl.PluralRules(locale).select(count);
return (msg[cat] ?? msg.other);
}Combinar con interpolación
Las cadenas plurales también suelen contener {count}. El tipo de argumentos puede combinar los requisitos de pluralización con las variables de interpolación extraídas de la forma elegida.
type FullArgs<M> = PluralArgs<M> & ExtractVars<M>;
// count plus any {placeholders} in the messageLocales con formas más variadas
Algunos locales (por ejemplo, el polaco y el ruso) usan few y many. Como PluralCategory ya los incluye, un catálogo puede proporcionar esas claves y el mismo mecanismo se encarga de ellas.
const ruItems = {
one: "{count} товар",
few: "{count} товара",
many: "{count} товаров",
other: "{count} товара",
};Exigir el valor de respaldo other
Como other es obligatorio en PluralMessage, el sistema de tipos garantiza que exista un valor de respaldo y evita un caso en tiempo de ejecución en el que ninguna forma plural coincida.
Por qué es importante
Los errores de pluralización («1 elementos») y los recuentos olvidados son habituales en la i18n sin tipos. Modelar las categorías como tipos y exigir count hace que la pluralización correcta sea el comportamiento predeterminado y que la ausencia del recuento produzca un error de compilación.
Comprobación rápida
Compruebe su comprensión de la pluralización con seguridad de tipos.
Resumen
Modeló los plurales como objetos cuyas claves son categorías de pluralización, con un valor de respaldo other obligatorio; detectó los mensajes plurales en el nivel de tipos y exigió un argumento count numérico mediante tipos condicionales. Intl.PluralRules selecciona la forma en tiempo de ejecución y el mismo mecanismo se adapta a locales con formas más variadas.
Preguntas frecuentes
¿La lección «Pluralización con tipos» es gratis?
Sí — el texto completo de «Pluralización con tipos» 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 «Pluralización con tipos»?
Modele formas plurales de manera segura respecto a los tipos. 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 3 de 4.
¿Cuánto tiempo toma la lección «Pluralización con tipos»?
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