Return 类型 'never' 如果给定可选参数是特定值
Return type 'never' if an optional parameter is given to be a specific value
我有一个函数接受一个可选的 boolean
参数,默认为 false
。当参数为 false
时,函数 return 为 string
。当参数为 true
时,函数应 return 键入 never
.
这是我尝试过的:
function example(arg: true): never;
function example(arg = false): string {
//...
}
这感觉应该可行:arg
被推断为具有 boolean
类型,并且当它未通过或作为 false
、example
returns string
。当它作为 true
传递时,过载开始并且 example
returns never
。
然而,这根本不起作用。 TypeScript 赋予 arg
类型 true
并使其成为必需的,并使 example
always return never
.
我也试过这个疯子,靠得更近了:
function example(arg: false): string;
function example(arg: true): never;
function example(arg: boolean): string | never;
function example(arg = false): string | never {
//...
}
但是编译器仍然不认为 arg
是可选的。
这似乎有效:
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
我有一个函数接受一个可选的 boolean
参数,默认为 false
。当参数为 false
时,函数 return 为 string
。当参数为 true
时,函数应 return 键入 never
.
这是我尝试过的:
function example(arg: true): never;
function example(arg = false): string {
//...
}
这感觉应该可行:arg
被推断为具有 boolean
类型,并且当它未通过或作为 false
、example
returns string
。当它作为 true
传递时,过载开始并且 example
returns never
。
然而,这根本不起作用。 TypeScript 赋予 arg
类型 true
并使其成为必需的,并使 example
always return never
.
我也试过这个疯子,靠得更近了:
function example(arg: false): string;
function example(arg: true): never;
function example(arg: boolean): string | never;
function example(arg = false): string | never {
//...
}
但是编译器仍然不认为 arg
是可选的。
这似乎有效:
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