Imagina que tengo un montón de opciones de carga útil como:
interface IOne { type: 'One', payload: { name: string, age: number } } interface ITwo { type: 'Two', payload: string } declare type TBoth = IOne | ITwo; Entonces puedo recibir uno de los dos anteriores como parámetro. Quiero que el mecanografiado pueda reconocer los parámetros de cada tipo al usar un switch , por ejemplo.
El problema que tengo es cuando intento crear el objeto.
const value = req.body?.message; // just an example const test: TBoth = { type: value ? 'One' : 'Two, // <--- Now it should autocomplete/suggest the rights parameters based on this attribute. }Yo obtengo:
Los tipos de propiedad 'tipo' son incompatibles. Escriba '"Uno" | "Dos"' no se puede asignar al tipo '"Dos"'.
¿Es posible?
const doSomething = (test: TBoth) => { if(test.type === `One`) { // hover the below `test` with VSCode you will see: // (parameter) test: IOne handleIOne(test) } else { // hover the below `test` with VSCode you will see: // (parameter) test: ITwo handleITwo(test) } }Ver un ejemplo en vivo