DEV Community

Cover image for Utility Types - Tipos utilitarios
Luis Osorio
Luis Osorio

Posted on • Edited on

Utility Types - Tipos utilitarios

Banner con las utilidades que podemos encontrar en TypeScript

Son herramientas que ayudan a transformar tipos existentes. Muy útiles para reusar interfaces sin repetir código.

Partial<T> – todas opcionales

type User = {
  id: number;
  name: string;
  email: string;
};

function updateUser(id: number, data: Partial<User>) {
  console.log(`Se actualizo el usuario: ${id} con`, data);
}

updateUser(1, { name: "Luis" }); // ✅
Enter fullscreen mode Exit fullscreen mode

Required<T> – todas obligatorias

type Config = {
  host?: string;
  port?: number;
};

function connect(cfg: Required<Config>) {
  console.log(`Conectando a ${cfg.host}:${cfg.port}`);
}

connect({ host: "localhost" }); // ❌ Error. falta una propiedad
Enter fullscreen mode Exit fullscreen mode

Readonly<T> – propiedades inmutables

type User = {
  id: number;
  name: string;
};

const user: Readonly<User> = {
  id: 1,
  name: "Luis"
};

user.name = "Pepito"; // ❌ Error
console.log(user);
Enter fullscreen mode Exit fullscreen mode

Pick<T, K> – selecciona claves específicas

type User = {
  id: number;
  name: string;
  email: string;
};

type PublicUser = Pick<User, "id" | "name">;

const user: PublicUser = {
  id: 1,
  name: "Luis"
  email: "test@gmail.com" // ❌ No permitido
};

console.log(user);
Enter fullscreen mode Exit fullscreen mode

Omit<T, K> – omite claves específicas

type User = {
  id: number;
  name: string;
  password: string;
};

type SafeUser = Omit<User, "password">;

const user: SafeUser = {
  id: 1,
  name: "Luis"
  password: "test" // ❌ No permitido
};

console.log(user);
Enter fullscreen mode Exit fullscreen mode

Otras utilidades


🔹 Record{ [key: string]: number }

Objeto con claves tipo string y valores tipo number

const scores: Record<string, number> = {
  alice: 10,
  bob: 15,
};
Enter fullscreen mode Exit fullscreen mode

🔹 Exclude<"a" | "b", "a">"b"

Excluye "a" del conjunto

type Letters = Exclude<"a" | "b", "a">;
// Resultado: "b"
Enter fullscreen mode Exit fullscreen mode

🔹 Extract<"a" | "b", "a" | "c">"a"

Extrae solo "a" porque está en ambos conjuntos

type Common = Extract<"a" | "b", "a" | "c">;
// Resultado: "a"
Enter fullscreen mode Exit fullscreen mode

🔹 NonNullablestring

Elimina null y undefined

type Clean = NonNullable<string | null | undefined>;
// Resultado: string
Enter fullscreen mode Exit fullscreen mode

🔹 ReturnType<() => number>number

Tipo de retorno de una función

function getAge() {
  return 30;
}
type Age = ReturnType<typeof getAge>;
// Resultado: number
Enter fullscreen mode Exit fullscreen mode

🔹 Parameters<(a: number, b: string) => void>[a: number, b: string]

Tupla con los parámetros de la función

type Params = Parameters<(a: number, b: string) => void>;
// Resultado: [number, string]
Enter fullscreen mode Exit fullscreen mode

🔹 ConstructorParameters[number, number, number, number?, number?, number?, number?]

Parámetros del constructor de Date

type DateArgs = ConstructorParameters<typeof Date>;
// Resultado: los argumentos que acepta new Date(...)
Enter fullscreen mode Exit fullscreen mode

🔹 InstanceTypeDate

Tipo de instancia que retorna el constructor

type DateInstance = InstanceType<typeof Date>;
// Resultado: Date
Enter fullscreen mode Exit fullscreen mode

🔹 ThisParameterType<(this: HTMLDivElement, e: MouseEvent) => void>HTMLDivElement

Extrae el tipo de this de la función

function handleClick(this: HTMLDivElement, event: MouseEvent) {
  this.innerHTML = "Clicked!";
}
type ThisType = ThisParameterType<typeof handleClick>;
// Resultado: HTMLDivElement
Enter fullscreen mode Exit fullscreen mode

🔹 OmitThisParameter<(this: HTMLDivElement, e: MouseEvent) => void>(e: MouseEvent) => void

Elimina el this del tipo de función

type WithoutThis = OmitThisParameter<typeof handleClick>;
// Resultado: (e: MouseEvent) => void
Enter fullscreen mode Exit fullscreen mode

Top comments (0)