Códigos secretos de TypeScript que deberías conocer

TypeScript, el superset de JavaScript que añade tipado estático, ofrece una serie de características poderosas que a menudo pasan desapercibidas. TypeScript es un lenguaje de programación de código abierto desarrollado por Microsoft que se construye sobre JavaScript. Este lenguaje añade tipado estático opcional y otras características que lo hacen ideal para el desarrollo de aplicaciones a gran escala.

En este artículo, te revelaré algunos códigos secretos y funcionales que te harán la vida más fácil como desarrollador.

TypeScript logo en SofTim
type TipoUsuario<T> = T extends { admin: boolean } ? 'Administrador' : 'Usuario';

type Usuario1 = TipoUsuario<{ nombre: string }>; // 'Usuario'

type Usuario2 = TipoUsuario<{ nombre: string, admin: true }>; // 'Administrador'
type UsuarioParcial<T> = {
  [P in keyof T]?: T[P];
};

interface Usuario {
  nombre: string;
  edad: number;
}

type UsuarioParcialTipo = UsuarioParcial<Usuario>; // { nombre?: string, edad?: number }
type TipoRetorno<T> = T extends (...args: any[]) => infer R ? R : any;

function obtenerNombre(): string {
  return 'Juan';
}

type NombreTipo = TipoRetorno<typeof obtenerNombre>; // string
interface Circulo {
  forma: 'circulo';
  radio: number;
}

interface Rectangulo {
  forma: 'rectangulo';
  ancho: number;
  alto: number;
}

type Forma = Circulo | Rectangulo;

function obtenerArea(forma: Forma): number {
  switch (forma.forma) {
    case 'circulo':
      return Math.PI * forma.radio ** 2;
    case 'rectangulo':
      return forma.ancho * forma.alto;
  }
}
type NombreCompleto<T extends { nombre: string, apellido: string }> = `${T['nombre']} ${T['apellido']}`;

interface Persona {
  nombre: string;
  apellido: string;
}

type NombreCompletoTipo = NombreCompleto<Persona>; // `${string} ${string}`
interface Usuario {
  nombre: string;
  edad: number;
}

type NombreTipo = Usuario['nombre']; // string
interface Usuario {
  nombre: string;
  edad: number;
}

type UsuarioSoloLectura = Readonly<Usuario>; // { readonly nombre: string, readonly edad: number }
interface Persona {
  nombre: string;
}

interface Empleado {
  salario: number;
}

type PersonaEmpleado = Persona & Empleado; // { nombre: string, salario: number }
function mostrarValor(valor: string | number): void {
  console.log(valor);
}

mostrarValor('Hola');

mostrarValor(123);
function obtenerPrimerElemento<T>(arreglo: T[]): T {
  return arreglo[0];
}

const primerNumero = obtenerPrimerElemento([1, 2, 3]); // number

const primerString = obtenerPrimerElemento(['a', 'b', 'c']); // string

Conclusión

Scroll al inicio