Biblioteca estándar de TypeScript: una visión completa
TypeScript es un superconjunto de JavaScript fuertemente tipado que se compila a JS normal. Sin embargo, su poder no reside solo en su sistema de tipos. La biblioteca estándar incorporada de TypeScript proporciona herramientas potentes para trabajar con tipos, utilidades y metaprogramación. En este artículo, analizaremos los componentes clave de la biblioteca estándar de TypeScript, mostraremos ejemplos de su uso y daremos consejos prácticos.
¿Qué es la biblioteca estándar de TypeScript?
La biblioteca estándar de TypeScript es un conjunto de tipos, interfaces y utilidades integrados que se incluyen con el compilador. Incluye:
- Tipos básicos (
string,number,boolean,any,unknown,never,void). - Tipos utilitarios (
Partial,Required,Pick,Omit,Recordy otros). - Decoradores (característica experimental para metaprogramación).
- Espacios de nombres (
namespace) y módulos. - Tipos avanzados (
Promise,Map,Set,WeakMap,WeakSet). - Tipos para trabajar con el DOM (se incluyen a través de
lib: ["dom"]).
Tipos utilitarios: el corazón de la biblioteca
Los tipos utilitarios permiten transformar tipos existentes sin duplicar código. Veamos los más populares:
Partial y Required
interface User { id: number; name: string; email: string;}
// Todos los campos se vuelven opcionalestype PartialUser = Partial<User>;
// Todos los campos se vuelven obligatorios (si eran opcionales)type RequiredUser = Required<PartialUser>;Pick y Omit
interface Product { id: number; title: string; price: number; description: string;}
// Seleccionamos solo los campos necesariostype ProductPreview = Pick<Product, 'id' | 'title'>;
// Excluimos los campos innecesariostype ProductWithoutDesc = Omit<Product, 'description'>;Record y Readonly
// Crea un objeto con claves y valores específicostype UserRoles = Record<'admin' | 'user' | 'guest', string>;
// Hace que todos los campos sean de solo lecturatype ReadonlyUser = Readonly<User>;Trabajo con Promise y asincronía
TypeScript proporciona tipos integrados para trabajar con código asíncrono:
async function fetchData(): Promise<string> { return "datos cargados";}
// Tipo para el resultado de Promisetype DataType = Awaited<ReturnType<typeof fetchData>>; // stringDecoradores: metaprogramación en TypeScript
Los decoradores son declaraciones especiales que permiten anotar y modificar clases, métodos, propiedades y parámetros. Se utilizan activamente en frameworks (Angular, NestJS).
Ejemplo de decorador de clase
function sealed(constructor: Function) { Object.seal(constructor); Object.seal(constructor.prototype);}
@sealedclass Calculator { add(a: number, b: number): number { return a + b; }}Ejemplo de decorador de método
function log(target: any, key: string, descriptor: PropertyDescriptor) { const original = descriptor.value; descriptor.value = function (...args: any[]) { console.log(`Método ${key} llamado con argumentos: ${args}`); return original.apply(this, args); }; return descriptor;}
class UserService { @log getUser(id: number): string { return `Usuario ${id}`; }}Espacios de nombres (Namespaces)
Los espacios de nombres ayudan a organizar el código y evitar