TypeScript: Tipos de datos avanzados
TypeScript y sus tipos de datos avanzados en 2024. Aprende a utilizar tipos condicionales, mapeados, de unión y más. Mejora tu código con TypeScript.
Aprende TypeScript GRATIS y certifícateTypeScript ofrece una robusta tipificación estática que permite escribir código más seguro y mantenible. Este módulo aborda los tipos de datos avanzados en TypeScript, incluyendo tipos condicionales, mapeados, de unión e intersección.
Tipos condicionales
Los tipos condicionales permiten definir tipos basados en una condición. La sintaxis básica es T extends U ? X : Y
. Esto significa que si T
extiende de U
, el tipo resultante será X
; en caso contrario, será Y
.
type NonNullable<T> = T extends null | undefined ? never : T;
type T1 = NonNullable<string | null>; // string
type T2 = NonNullable<number | undefined>; // number
En el ejemplo anterior, NonNullable
elimina null
y undefined
de T
.
Tipos mapeados
Los tipos mapeados permiten crear nuevos tipos transformando propiedades de un tipo existente. Utilizan la sintaxis { [P in K]: T }
, donde P
es el nombre de la propiedad y K
es un conjunto de claves.
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
interface User {
id: number;
name: string;
}
type ReadonlyUser = Readonly<User>;
// ReadonlyUser es equivalente a:
// {
// readonly id: number;
// readonly name: string;
// }
En este ejemplo, Readonly
transforma todas las propiedades de T
en propiedades de solo lectura.
Tipos de unión e intersección
Los tipos de unión (|
) permiten que una variable sea de uno de varios tipos. Por otro lado, los tipos de intersección (&
) combinan múltiples tipos en uno solo.
type ID = string | number;
type User = {
id: ID;
name: string;
};
type Admin = User & {
privileges: string[];
};
const admin: Admin = {
id: 1,
name: 'Alice',
privileges: ['manage-users', 'edit-settings']
};
Aquí, ID
puede ser un string
o un number
, mientras que Admin
combina User
con un conjunto adicional de privileges
.
Tipos inferidos
TypeScript puede inferir tipos automáticamente, lo que facilita la escritura de código sin especificar explícitamente cada tipo.
const user = {
id: 1,
name: 'Alice'
};
function getUser(id: number) {
return user;
}
const newUser = getUser(1);
// TypeScript infiere que newUser es de tipo { id: number; name: string; }
La inferencia de tipos ayuda a mantener el código limpio y legible.
Tipos utilitarios
TypeScript incluye varios tipos utilitarios en su biblioteca estándar, como Partial
, Required
, Readonly
, Pick
, Omit
, entre otros.
interface User {
id: number;
name: string;
email?: string;
}
type PartialUser = Partial<User>;
// PartialUser es equivalente a:
// {
// id?: number;
// name?: string;
// email?: string;
// }
type RequiredUser = Required<User>;
// RequiredUser es equivalente a:
// {
// id: number;
// name: string;
// email: string;
// }
Estos tipos utilitarios permiten realizar transformaciones comunes sin necesidad de definir nuevos tipos manualmente.
Lecciones de este módulo de TypeScript
Lecciones de programación del módulo Tipos de datos avanzados del curso de TypeScript.
Ejercicios de programación en este módulo de TypeScript
Evalúa tus conocimientos en Tipos de datos avanzados con ejercicios de programación Tipos de datos avanzados de tipo Test, Puzzle, Código y Proyecto con VSCode.