Funciones de aserción y protectores de tipo definidos por el usuario
Escriba funciones de aserción (asserts x is T) y protectores de tipo definidos por el usuario (x is T) para reducir de forma segura valores unknown o de unión.
Funciones de aserción y protectores de tipo definidos por el usuario es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 3 de 3. 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 3 lecciones en total.
Introducción
Objetivo: Convertir las comprobaciones en tiempo de ejecución en refinamientos de tipos mediante funciones de aserción y guardas de tipos definidas por el usuario para crear API seguras.
Función de aserción
Una función de aserción estrecha los tipos para el código posterior si retorna; de lo contrario, debe lanzar una excepción.
function assertIsString(x: unknown): asserts x is string {
if (typeof x !== "string") {
throw new Error("Expected string");
}
}
let v: unknown = Math.random() > 0.5 ? "ok" : 42;
assertIsString(v); // after this, v is string
console.log(v.toUpperCase());Función de guarda de tipos
Una guarda de tipos devuelve x is T, lo que permite un refinamiento inteligente en ramas y funciones auxiliares.
type Circle = { kind: "circle"; radius: number };
type Square = { kind: "square"; size: number };
type Shape = Circle | Square;
function isCircle(s: Shape): s is Circle {
return s.kind === "circle";
}
function area(s: Shape): number {
if (isCircle(s)) {
return Math.PI * s.radius ** 2; // s is Circle here
}
return s.size * s.size; // s is Square here
}
console.log(area({ kind: "circle", radius: 2 }));Guardas en filter
Las guardas pueden actuar como predicados para métodos de arrays (por ejemplo, filter) y refinar limpiamente los tipos de los elementos.
type Item = { id: number } | null | undefined;
function isPresent<T>(x: T | null | undefined): x is T {
return x != null;
}
const items: Item[] = [{ id: 1 }, null, undefined, { id: 2 }];
const present = items.filter(isPresent);
// present has type { id: number }[]
console.log(present.map(i => i.id));Aserción sobre datos en tiempo de ejecución
Combine el análisis sintáctico con una aserción para fallar rápidamente cuando un valor no tenga el tipo esperado.
function parseJson(s: string): unknown {
return JSON.parse(s);
}
try {
const data = parseJson("{\"name\":\"Ada\"}");
assertIsString(data); // will throw, because data is object
} catch (e) {
console.log("Handled:", e instanceof Error ? e.message : e);
}Directrices
Directrices:
- Las aserciones deben lanzar una excepción cuando fallan.
- Prefiera las guardas (
x is T) para la lógica de ramificación. - Utilice aserciones en los límites de las API (E/S, JSON y DOM).
Comprobación de funciones de aserción
Comprobación rápida: ¿Qué garantiza una función de aserción con asserts x is string?
Resumen
Resumen: Utilice funciones de aserción para imponer los tipos después de las comprobaciones y guardas de tipos definidas por el usuario para estrechar ramas y colecciones.
Preguntas frecuentes
¿La lección «Funciones de aserción y protectores de tipo definidos por el usuario» es gratis?
Sí — el texto completo de «Funciones de aserción y protectores de tipo definidos por el usuario» 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 3 lecciones en total.
¿Qué aprenderé en «Funciones de aserción y protectores de tipo definidos por el usuario»?
Escriba funciones de aserción (asserts x is T) y protectores de tipo definidos por el usuario (x is T) para reducir de forma segura valores unknown o de unión. 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 3.
¿Cuánto tiempo toma la lección «Funciones de aserción y protectores de tipo definidos por el usuario»?
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
- Sobrecargas de funciones y firmas de llamada
- Tipado del parámetro this; void y never
- Funciones de aserción y protectores de tipo definidos por el usuario