Typescript 返回类型';绝不';如果将可选参数指定为特定值
我有一个函数,它接受一个可选的Typescript 返回类型';绝不';如果将可选参数指定为特定值,typescript,function,overloading,typing,Typescript,Function,Overloading,Typing,我有一个函数,它接受一个可选的boolean参数,该参数默认为false。当参数为false时,函数返回一个字符串。当参数为true时,函数应返回typenever 以下是我尝试过的: function example(arg: true): never; function example(arg = false): string { //... } 这让人感觉它应该可以工作:arg被推断为具有boolean类型,当它未被传递或作为false传递时,示例返回字符串。当它作为true传递时,
boolean
参数,该参数默认为false
。当参数为false
时,函数返回一个字符串。当参数为true
时,函数应返回typenever
以下是我尝试过的:
function example(arg: true): never;
function example(arg = false): string {
//...
}
这让人感觉它应该可以工作:arg
被推断为具有boolean
类型,当它未被传递或作为false
传递时,示例
返回字符串
。当它作为true
传递时,重载开始生效,example
返回never
然而,这根本不起作用。TypeScript提供arg
类型true
,并使其成为必需的,并使示例始终返回从不
我也试过这种疯狂的方式,并且更接近:
function example(arg: false): string;
function example(arg: true): never;
function example(arg: boolean): string | never;
function example(arg = false): string | never {
//...
}
<>但是编译器仍然没有考虑<代码> ARG是可选的。 < P>这似乎起作用:
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
谢谢!我能够使用您的代码使其正常工作,但添加了一个额外的重载示例(arg:boolean):对于传递的变量类型为boolean
的情况,永远不要使用| string
,而不是true
或false
@Ian,啊,我错过了那部分!更新了答案。