Digamos que alguna función puede devolver Blob , String u Object simple , según el caso de uso. Después de que se devuelva el valor, quiero implementar un código diferente para cada tipo. ¿Cómo puedo distinguirlos?
Para simplificar, comenté las 3 opciones que pueden regresar desde la función de administración, pero esta es la forma en que lo administro ahora:
const manage = () => { return new Blob([JSON.stringify({ myKey: 'myValue'})], { type: 'application/json' }); // return { error: 'my error msg' }; // return 'lets say this is base64 string'; }; const result: Blob | { error: string } | string = manage(); switch(Object.prototype.toString.call(result)) { case "[object Blob]": console.log('Blob case runs...'); break; case "[object String]": console.log('String case runs...'); break; case "[object Object]": console.log('Object case runs...'); break; default: console.log('Default case runs...'); }; <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>Obviamente no estoy contento con la solución "Object.prototype.toString.call" . También algunas respuestas sugirieron usar el operador "instancia de" , pero esta tampoco es una opción confiable en mi situación.
¿Puede alguien señalarme en una mejor dirección?
solo puede devolver el tipo de datos y los datos en la función manage
const manage = () => { return { type: "Bolb", data: new Blob([JSON.stringify({ myKey: 'myValue'})], { type: 'application/json' }); } return {type: "error", error: 'my error msg' }; return {type: "string", message: 'lets say this is base64 string'}; }; const result: Object = manage(); switch(result.type) { case "Bolb": console.log('Blob case runs...'); break; case "string": console.log('String case runs...'); break; case "error": console.log('Object case runs...'); break; default: console.log('Default case runs...'); };