Por qué existe satisfies
Descubra la diferencia entre la anotación y la inferencia que satisface satisfies.
Por qué existe satisfies es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 1 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.
Los dos objetivos en tensión
Al declarar una configuración, normalmente busca dos cosas: validación respecto de una estructura conocida y inferencia precisa de los valores literales. Estos objetivos suelen entrar en conflicto.
type Color = "red" | "green" | "blue";
// We want both: check the values AND remember exactly which ones.La anotación pierde el estrechamiento de literales
Agregar una anotación de tipo valida el objeto, pero ensancha los valores. El compilador olvida los literales exactos que escribió.
type Config = { color: string; retries: number };
const cfg: Config = { color: "red", retries: 3 };
// cfg.color is string, not "red" anymore.
console.log(cfg.color.toUpperCase());Por qué perjudica el ensanchamiento
Si color se ensancha a string, pierde la posibilidad de usarlo en lugares que necesitan el literal específico, como al indexar otro tipo.
const cfg = { color: "red" } as { color: string };
// const exact: "red" = cfg.color; // Error: string not assignable to "red"
console.log(cfg.color);Sin anotación se pierde la validación
Quitar la anotación conserva la inferencia precisa, pero elimina la red de seguridad. Los errores tipográficos y las estructuras incorrectas pasan inadvertidos.
const cfg = { color: "rad", retries: 3 };
// No error on the typo "rad" because nothing validates it.
console.log(cfg.color);La brecha de validación
Sin una comprobación, un valor no válido, como un color escrito incorrectamente, circula silenciosamente por el programa y puede provocar un fallo lejos del lugar donde se cometió el error.
const palette = { primary: "blu" }; // typo, no error
console.log(palette.primary); // "blu"Entra en escena el operador satisfies
El operador satisfies valida una expresión respecto de un tipo y, al mismo tiempo, conserva el tipo inferido preciso. Lo mejor de ambos enfoques.
type Config = { color: string; retries: number };
const cfg = { color: "red", retries: 3 } satisfies Config;
console.log(cfg.color); // type is "red", value validatedsatisfies conserva los literales
Después de usar satisfies, cfg.color sigue siendo el literal "red", no el tipo amplio string. La inferencia se conserva.
type Config = { color: string };
const cfg = { color: "red" } satisfies Config;
const exact: "red" = cfg.color; // OK
console.log(exact);satisfies también valida
Si el objeto no coincide con el tipo, satisfies informa de un error, igual que lo haría una anotación.
type Config = { retries: number };
// const bad = { retries: "three" } satisfies Config; // Error
const good = { retries: 3 } satisfies Config;
console.log(good.retries);El ejemplo motivador
Considere un mapa de rutas cuyas claves deben ser rutas conocidas y cuyos valores son nombres de controladores. Queremos autocompletado para las claves Y valores validados, algo que satisfies proporciona.
type Routes = Record<string, { method: "GET" | "POST" }>;
const routes = {
home: { method: "GET" },
submit: { method: "POST" }
} satisfies Routes;
console.log(routes.home.method); // "GET" literalComparación de los tres enfoques
Anotación: valida y ensancha. Sin anotación: precisa, pero sin validar. satisfies: valida y conserva la precisión. El tercer enfoque es el mejor para las configuraciones.
type C = { color: string };
const a: C = { color: "red" }; // widened
const b = { color: "red" }; // unvalidated
const c = { color: "red" } satisfies C; // validated + precise
console.log(a.color, b.color, c.color);Cuándo recurrir a satisfies
Use satisfies siempre que defina un valor constante que deba ajustarse a un tipo, pero también quiera usar posteriormente su contenido exacto.
type Sizes = Record<string, number>;
const sizes = { sm: 8, md: 16, lg: 24 } satisfies Sizes;
// keys "sm" | "md" | "lg" stay known for autocomplete
console.log(sizes.md);Comprobación rápida: por qué satisifies
Compruebe que entiende por qué existe satisfies.
Resumen: por qué existe satisfies
Ha aprendido que las anotaciones validan, pero ensanchan; que la ausencia de anotación conserva la precisión, pero no valida; y que satisfies ofrece validación e inferencia precisa, lo ideal para los objetos de configuración.
type C = { color: string };
const c = { color: "blue" } satisfies C;
const exact: "blue" = c.color;
console.log(exact);Preguntas frecuentes
¿La lección «Por qué existe satisfies» es gratis?
Sí — el texto completo de «Por qué existe satisfies» 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 «Por qué existe satisfies»?
Descubra la diferencia entre la anotación y la inferencia que satisface satisfies. 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 1 de 4.
¿Cuánto tiempo toma la lección «Por qué existe satisfies»?
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
- Por qué existe satisfies
- satisfies frente a la anotación de tipos
- satisfies frente a la aserción as
- Patrones prácticos con satisfies