Skip to content

Cheat Sheet de TypeScript

Última verificación mayo 2026 — corre en tu navegador
Cheatsheet de TypeScript
let x: number = 10

Tipo number

Tipos básicos
let s: string = "hello"

Tipo string

Tipos básicos
let b: boolean = true

Tipo boolean

Tipos básicos
let arr: number[] = [1, 2, 3]

Tipo array

Tipos básicos
let tuple: [string, number]

Tipo tupla (longitud y tipos fijos)

Tipos básicos
let x: any

Tipo any (sin verificación de tipos)

Tipos básicos
let x: unknown

Tipo unknown (más seguro que any)

Tipos básicos
let x: never

Tipo never (código inalcanzable)

Tipos básicos
let x: void

Tipo void (sin valor de retorno)

Tipos básicos
let x: null | undefined

Tipos null y undefined

Tipos básicos
type ID = string | number

Tipo unión

Tipos básicos
type Point = { x: number; y: number }

Alias de tipo para objeto

Tipos básicos
const x = "hello" as const

Aserción const (tipo literal)

Tipos básicos
interface User { name: string; age: number; }

Declaración de interfaz

Interfaces
interface User { email?: string; }

Propiedad opcional

Interfaces
interface User { readonly id: number; }

Propiedad de solo lectura

Interfaces
interface Admin extends User { role: string; }

Herencia de interfaz

Interfaces
interface Fn { (x: number): string; }

Interfaz invocable

Interfaces
interface Dict { [key: string]: number; }

Firma de índice

Interfaces
interface A extends B, C {}

Herencia múltiple

Interfaces
function identity<T>(arg: T): T { return arg; }

Función genérica

Genéricos
interface Box<T> { value: T; }

Interfaz genérica

Genéricos
class Container<T> { constructor(public value: T) {} }

Clase genérica

Genéricos
function fn<T extends HasLength>(x: T)

Restricción genérica

Genéricos
function fn<T, K extends keyof T>(obj: T, key: K)

Restricción keyof

Genéricos
type Pair<T, U = T> = [T, U]

Genérico con tipo por defecto

Genéricos
function fn<T extends string | number>(x: T)

Restricción de unión

Genéricos
Partial<User>

Hacer todas las propiedades opcionales

Tipos de utilidad
Required<User>

Hacer todas las propiedades requeridas

Tipos de utilidad
Readonly<User>

Hacer todas las propiedades de solo lectura

Tipos de utilidad
Pick<User, "name" | "age">

Seleccionar subconjunto de propiedades

Tipos de utilidad
Omit<User, "password">

Omitir propiedades específicas

Tipos de utilidad
Record<string, number>

Tipo objeto con tipos clave/valor

Tipos de utilidad
ReturnType<typeof fn>

Extraer tipo de retorno de función

Tipos de utilidad
Parameters<typeof fn>

Extraer tipos de parámetros de función

Tipos de utilidad
Awaited<Promise<string>>

Desenvolver tipo Promise

Tipos de utilidad
NonNullable<string | null>

Eliminar null/undefined del tipo

Tipos de utilidad
Extract<A | B | C, A | B>

Extraer miembros coincidentes de la unión

Tipos de utilidad
Exclude<A | B | C, A>

Eliminar miembros coincidentes de la unión

Tipos de utilidad
if (typeof x === "string")

Guardia typeof

Guardias de tipo
if (x instanceof Date)

Guardia instanceof

Guardias de tipo
if ("name" in obj)

Guardia con operador in

Guardias de tipo
function isUser(x: any): x is User { return "name" in x; }

Predicado de tipo personalizado

Guardias de tipo
x as string

Aserción de tipo

Guardias de tipo
x satisfies Type

Operador satisfies (TS 4.9+)

Guardias de tipo
enum Direction { Up, Down, Left, Right }

Enum numérico (0, 1, 2, 3)

Enums
enum Status { Active = "ACTIVE", Inactive = "INACTIVE" }

Enum de cadenas

Enums
const enum Color { Red, Green, Blue }

Enum const (insertado en compilación)

Enums
type Keys = keyof User

Obtener unión de claves del objeto

Avanzado
type Val = User["name"]

Tipo de acceso indexado

Avanzado
type Mapped = { [K in keyof T]: boolean }

Tipo mapeado

Avanzado
type IsString<T> = T extends string ? "yes" : "no"

Tipo condicional

Avanzado
type Flatten<T> = T extends Array<infer U> ? U : T

Palabra clave infer

Avanzado
type Literal = "a" | "b" | "c"

Tipo unión de literales de cadena

Avanzado
declare module "lib" { export function fn(): void; }

Declaración de módulo (ambient)

Avanzado
// @ts-ignore

Suprimir error TS en la siguiente línea

Avanzado
// @ts-expect-error

Esperar error en la siguiente línea

Avanzado
Mostrando 57 de 57 entradas

Cheat Sheet de TypeScript — Interfaces, Genéricos, Utility Types y Type Guards

TypeScript salió en 2012 como superset tipado de JavaScript; el sistema de tipos ha crecido bastante desde entonces —genéricos, tipos condicionales, `infer`, tipos de plantilla, `satisfies`— mientras que el runtime sigue siendo JavaScript puro sin comprobaciones. La chuleta de abajo cubre más de 55 patrones entre básicos, interfaces, genéricos, utility types, type guards, enums y avanzados. La mayoría de los líos en código TypeScript real no vienen de olvidar la sintaxis. Vienen de rarezas que parecen normales pero muerden. `any` y `unknown` se parecen pero se comportan de forma opuesta: `any` desactiva el chequeo, mientras que `unknown` exige una comprobación de narrowing antes de poder usarse. El cast con `as` le dice al compilador que se fíe y desactiva la comprobación en esa línea sin avisar. El tipado estructural hace que dos tipos con la misma forma sean intercambiables, lo que sorprende a quien viene de Java o C#. Estos son los fragmentos que se acaban consultando al depurar precisamente eso: el predicado de narrowing correcto, el utility type adecuado, la restricción de genérico apropiada, sin releer la referencia desde la línea uno cada vez.

Trampas habituales en TypeScript

Hay un puñado de patrones que merecen estar en la primera pantalla de cualquier archivo de TypeScript. Conviene tirar de `unknown` antes que de `any` cuando la forma del valor no esté clara: `unknown` mantiene el sistema de tipos activo y obliga a una comprobación (`typeof`, `instanceof` o un predicado) antes de acceder a una propiedad. `satisfies` suele preferirse frente a una anotación al asignar una constante: valida la forma manteniendo el tipo literal estrecho. `--strictNullChecks` convierte `null` y `undefined` en tipos distintos que hay que excluir con encadenamiento opcional, el operador `??` o un type guard; sin el flag, ambos se cuelan en cada tipo sin avisar. Las aserciones con `as` deberían ser el último recurso: un predicado `x is User` es verificable, mientras que `x as User` es una promesa que el compilador acepta sin pruebas. Las firmas de índice `[key: string]: T` aceptan lecturas de claves inexistentes, y solo devuelven `T | undefined` cuando se activa `--noUncheckedIndexedAccess`. La chuleta agrupa esto en Basic Types, Interfaces, Generics, Utility Types, Type Guards, Enums y Advanced para que la sección adecuada esté a un clic.

  • Más de 55 patrones de tipos TypeScript
  • 7 categorías desde básicos hasta avanzado
  • Todos los tipos de utilidad cubiertos
  • Patrones genéricos y restricciones
  • Copia al portapapeles con un clic
  • Cubre funcionalidades de TypeScript 5.x

Gratis. Sin registro. Tus datos permanecen en tu navegador. Anuncios mediante Google AdSense (con consentimiento).

Por ·