Как выполнить рефакторинг перегрузок функций с разной арностью без использования перегрузок? - PullRequest
0 голосов
/ 22 декабря 2019

У меня есть объявление функции машинописи с разной арностью:

function f(): void;
function f(code: 0): void;
function f(code: 1, msg: string): void;
function f(code: 0 | 1 = 0, msg?: string): void { /* omit implementation */ }

Таким образом, оно может быть вызвано как:

f() // ok
f(0) // ok
f(1, "error message") // ok
f(0, "message") // type error
f(1) // type error

Мой вопрос заключается в том, как я могу реорганизовать это объявление функции без использованияперегрузка функции? (Например, с типами объединения, условными типами и т. Д.)

1 Ответ

0 голосов
/ 22 декабря 2019

Как насчет этого?

type Message = {code: 0 } | {code: 1, messageText?: string};

const useMessage = (message?: Message) => {};

const usedMessage_0 = useMessage();
const usedMessage_1 = useMessage({code: 0});
const usedMessage_2 = useMessage({code: 1});

const usedMessage_3 = useMessage({code: 0, messageText: 'something'}); // type error
const usedMessage_4 = useMessage({code: 1, messageText: 'something'});

...