I am trying to write a function which takes a parameter of type boolean and returns one of two types, depending on the value of the input. I have found two approaches:
function dependsOnParameter<B extends boolean>(x: B): B extends true ? number : string {
if (x) {
return 3;
} else {
return "string";
}
}
Here, TypeScript says that Type '3'/'"string"' is not assignable to type 'B extends true ? number : string'.
My other approach looks like this:
function dependsOnParameter(x: true): number;
function dependsOnParameter(x: false): string;
function dependsOnParameter(x: boolean): number | string {
if (x) {
return 3;
} else {
return "string";
}
}
This compiles; however, if I try to use my function:
function calling(x: boolean) {
dependsOnParameter(x);
}
I get Argument of type 'boolean' is not assignable to parameter of type 'false'
.
Is there any way to achieve what I want without using any
?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…