Возвращаемый тип 'never', если задан необязательный параметр для определенного значения - PullRequest
1 голос
/ 15 октября 2019

У меня есть функция, которая принимает необязательный аргумент boolean, который по умолчанию равен false. Когда аргумент false, функция возвращает string. Когда аргумент true, функция должна возвращать тип never.

Вот что я попробовал:

function example(arg: true): never;
function example(arg = false): string {
  //...
}

Такое ощущение, что это должно работать: arg выведено наимеют тип boolean, и когда он не передан или передан как false, example возвращает string. Когда он передается как true, перегрузка срабатывает и example возвращает never.

Однако это не работает вообще. TypeScript дает arg тип true, делает его обязательным и делает example всегда 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 необязательным.

1 Ответ

2 голосов
/ 15 октября 2019

Это похоже на работу:

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

Ссылка на игровую площадку

...