Tengo estos dos tipos:
export type Equipment = { id: string; name: string; path: WorkCenter[]; key?: string; pathToElement?: string[]; machine_id?: StatesData.MachineMapping['machine_id']; machine_codes?: StatesData.MachineMapping['machine_codes']; timeout_s?: StatesData.MachineMapping['timeout_s']; stateMachines?: StatesData.MachineState['machines']; }; export type WorkCenter = { id: string; name: string; children?: Equipment[]; key?: string; pathToElement?: string[]; stateMachines?: StatesData.MachineState['machines']; }; En un punto de mi código, obtengo una variable que puede ser de tipo Equipment o WorkCenter .
¿Cómo puedo determinar cuál es? Dependiendo de si es Equipment o WorkCenter , necesito que suceda una lógica diferente.
Hasta ahora estoy aceptando esto:
args: Equipment | WorkCenterPero no puedo pensar en una manera simple de probar qué tipo es este.
Hacer typeof tendría más sentido, pero no funciona para los tipos ts, por lo que no funcionará. Tampoco puedo simplemente probar una propiedad que existe solo en Equipment , ya que ts lo verá como no una unión. ¿Qué me estoy perdiendo?
Tampoco puedo simplemente probar una propiedad que existe solo en el Equipo, ya que ts lo verá como no una unión.
El uso de la notación de corchetes le permite probar sin que TS se queje
type TypeOne = { path: string; }; type TypeTwo = { child: string; }; const testIt = (t: TypeOne | TypeTwo) => { console.log(t['child']); }