DEV Community

Cover image for Paracetamol.ts💊| #46: Explica este código TypeScript
Cristian Fernando
Cristian Fernando

Posted on

Paracetamol.ts💊| #46: Explica este código TypeScript

Explica este código TypeScript

Dificultad: Básico

type Empleado = {id:number; nombre: string; area:"Ventas" | "RH" | "Finanzas"};
type Admin = {id:number; nombre: string; empleados:Empleado[]};

type Staff = Empleado | Admin;

const logPerson = (staff: Staff) =>{
    if("area" in staff){
        console.log(`El empleado ${staff.nombre} trabaja en ${staff.area}`)
    }else {
        console.log(`El admin ${staff.nombre} tiene ${staff.empleados.length} empleados a su cargo`)
    }
}

const pedro:Empleado = {
    id: 1,
    nombre: "pedro",
    area:"Ventas",
}

const carlos:Empleado = {
    id:2,
    nombre:"carlos",
    area: "RH",
}

const felipe:Admin = {
    id:1,
    nombre:"felipe",
    empleados: [pedro, carlos],
}

logPerson(felipe)
Enter fullscreen mode Exit fullscreen mode
  • A. SyntaxError
  • B. "El admin felipe tiene 2 empleados a su cargo"
  • C. TypeError
  • D. undefined

Respuesta

✅ B. "El admin felipe tiene 2 empleados a su cargo"

En TypeScript tenemos la característica de usar type para declarar tipos de manera mas usable y reutilizable, incluso fusionar conceptos y usar estos tipos como uniones.

Notar que el narrowing en este ejemplo es imoportante para diferenciar cuando estamos tratanto con un Empleado y cuando con un Admin, esto no lo podemos hacer usando el operador typeof como en otros ejemplos puesto que ni Empleado ni Admin son tipos de datos validos de JavaScript, por este motivo verificamos una llave en especifico para cada caso: si tiene la key area se trata de un Empleado y sino se trata de un Admin.


Top comments (0)