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 类型,并且当它未通过或作为 falseexample 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

Link to playground