I'm having a hard time working with functions that return multiple types:
Here's an example
function returnM(x: Number): Number | { a: Number; b: Number } | undefined {
if (x < 10) {
return undefined;
} else {
return x;
}
}
let result: any = returnM(3);
switch (result) {
case undefined: {
// do NNN
break;
}
// case Number do XXX
// case Object {a: Number, b: Number } do YYY
}
console.log(result);
I'm trying to find an elegant way to inspect the specific type that's returned and then act accordingly.
Even having to set "result: any " feels like a bit of a hack.
What's the best way to handle this?
You should use number
instead of Number
.
function returnM(x: number): number | { a: number; b: number } | undefined {
if (x < 10) {
return undefined;
} else {
return x;
}
}
let result = returnM(3);
switch (typeof result) {
case "undefined": {
result // type: undefined
break;
}
case "number": {
result // type: number
break;
}
case "object": {
result // type: { a: number; b: number }
break;
}
}
If your return type looks exactly like your demo code, then switch(typeof result)
is possible:
function returnM(x: Number): Number | { a: Number; b: Number } | undefined {
if (x < 10) {
return undefined;
} else if(x < 20) {
return {"a":10,"b":Number(x)-10};
} else {
return x;
}
}
let result: any = returnM(Math.random()*40);
switch (typeof result) {
case "undefined":
console.log("undefined is returned");
break;
case "number":
console.log("A number is returned");
break;
case "object":
console.log("An object is returned");
}
console.log(result);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.