如果将可选参数指定为特定值,则返回类型“从不”

时间:2019-10-15 01:30:41

标签: typescript function overloading typing

我有一个函数带有一个可选的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 { //... } 是可选的。

1 个答案:

答案 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

Link to playground