我有一个函数带有一个可选的boolean
参数,默认为false
。当参数为false
时,函数将返回string
。当参数为true
时,该函数应返回类型never
。
这是我尝试过的:
function example(arg: true): never;
function example(arg = false): string {
//...
}
这感觉像应该起作用:arg
被推断为具有boolean
类型,并且当未传递或以false
传递时,example
返回{{ 1}}。当它作为string
传递时,过载开始,true
返回example
。
但是,这根本不起作用。 TypeScript为never
提供arg
类型,并使其成为必需,并使true
始终返回example
。
我也尝试过这种疯狂,并且走近了:
never
但是,编译器仍然不认为function example(arg: false): string;
function example(arg: true): never;
function example(arg: boolean): string | never;
function example(arg = false): string | never {
//...
}
是可选的。
答案 0 :(得分:2)
这似乎可行:
function example(arg: true): never;
function example(arg?: false): string;
function example(arg: boolean): string;
function example(arg: boolean = false): never | string {
if (!arg) {
return 'foo';
}
throw new Error();
}
const foo = example(true); // typeof foo is never
const bar = example(false); // typeof bar is string
const baz = example(); // typeof baz is string