Refinamiento de uniones entre límites de funciones
Mantenga una reducción segura entre límites de funciones mediante uniones discriminadas, retornos predicado y tipos al estilo Result.
Refinamiento de uniones entre límites de funciones 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: Mantenga intacto el estrechamiento entre llamadas a funciones mediante uniones etiquetadas, retornos de predicados y ayudantes de validación.
- Cero
asinseguros en los puntos de llamada - Las mejoras de tipo viajan con los datos
Retorno de unión etiquetada
Patrón Result: quien llama estrecha el tipo comprobando ok. No hay conversiones de tipo y el flujo de control es claro.
type Ok<T> = { ok: true; value: T }
type Err = { ok: false; error: string }
type Result<T> = Ok<T> | Err
function parseIntSafe(s: string): Result<number> {
const n = Number(s)
return Number.isFinite(n) ? { ok: true, value: n } : { ok: false, error: "NaN" }
}
function useIt(s: string) {
const r = parseIntSafe(s)
if (r.ok) {
// r is Ok<number>
return r.value * 2
}
// r is Err
return `bad: ${r.error}`
}Retorno de predicado
Los retornos de predicados (x is T) centralizan las comprobaciones y mantienen el estrechamiento en los puntos de llamada.
type User = { id: number; name: string }
type MaybeUser = User | null
function hasUser(x: MaybeUser): x is User {
return x !== null
}
function greet(x: MaybeUser) {
if (hasUser(x)) {
// x narrowed to User
return `Hello ${x.name}`
}
return "Anonymous"
}Propagar el estrechamiento
Estreche el tipo con una guarda (por ejemplo, isCircle) y después pase el valor; las funciones posteriores verán el tipo más específico.
type Shape =
| { kind: "circle"; radius: number }
| { kind: "square"; size: number }
function isCircle(s: Shape): s is Extract<Shape, { kind: "circle" }> {
return s.kind === "circle"
}
function area(s: Shape) {
if (isCircle(s)) {
// s is circle here
return Math.PI * s.radius * s.radius
}
return s.size * s.size
}Validar en el límite
Valide en el límite y devuelva Valid/Invalid; quienes llaman estrechan el tipo mediante la etiqueta y obtienen datos completamente tipados.
type Payload = { email: string; retries?: number }
type Valid = { ok: true; data: Required<Payload> }
type Invalid = { ok: false; issues: string[] }
type Validation = Valid | Invalid
function validate(p: unknown): Validation {
const issues: string[] = []
if (typeof p !== "object" || p === null) return { ok: false, issues: ["not an object"] }
const x = p as any
if (typeof x.email !== "string") issues.push("email:string")
if (x.retries !== undefined && typeof x.retries !== "number") issues.push("retries:number")
if (issues.length) return { ok: false, issues }
return { ok: true, data: { email: x.email, retries: x.retries ?? 0 } }
}
function handle(p: unknown) {
const v = validate(p)
if (!v.ok) return `bad: ${v.issues.join(",")}`
// v.data is fully typed here
return `send to ${v.data.email} (${v.data.retries})`
}Consejos
Prácticas recomendadas:
- Prefiera etiquetas pequeñas y estables (ok, kind)
- Centralice las comprobaciones en ayudantes de predicados
- Utilice switches exhaustivos en los puntos de llamada
- Evite
anyy las conversiones de tipo inseguras
Estrechamiento entre límites
Comprobación rápida: ¿Qué patrón conserva mejor el estrechamiento entre los límites de las funciones?
Repaso
Repaso: Transporte las mejoras de tipo como datos (Result), valide en los límites y evite las conversiones inseguras; quienes llaman estrechan el tipo mediante comprobaciones sencillas de etiquetas.
Aprende TypeScript con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 101
- Lecciones
- 352
Preguntas frecuentes
¿La lección «Refinamiento de uniones entre límites de funciones» es gratis?
Sí — el texto completo de «Refinamiento de uniones entre límites de funciones» 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 «Refinamiento de uniones entre límites de funciones»?
Mantenga una reducción segura entre límites de funciones mediante uniones discriminadas, retornos predicado y tipos al estilo Result. 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 «Refinamiento de uniones entre límites de funciones»?
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
- Switches exhaustivos y comprobaciones con never
- Funciones predicado y operador satisfies
- Refinamiento de uniones entre límites de funciones