Скажем, у меня есть функция с аргументом, который может принимать только два значения type Value = "a" | "b"
. Теперь у меня есть функция, которая на основе значения этого аргумента должна возвращать другой результат:
type Value = "a" | "b";
function Method(value: Value){
if (value === "a") return 1000;
else return "word"
}
const Result = Method("a");
Теоретически, если мое значение равно «а» (которое можно вывести при вызове функции с постоянным значением «а»), я верну число. Если значение равно "b", я ожидаю строку.
Что не так в этом фрагменте и как я могу заставить это работать?
Вы можете использовать перегрузки функций, как показано ниже:
type Value = "a" | "b";
function Method(value: "a"): number;
function Method(value: "b"): string;
function Method(value: Value){
if (value === "a") return 1000;
else return "word";
}
const Result = Method("a");
Вы можете использовать оператор switch вместо оператора if и only в этих двух значениях:
switch (value) {
case 'a':
return 1000;
case 'b':
return 'word'
}
return null; //in case the value falls out the expected values but this is optional
Идеальный! Перегрузка функций сделала свое дело, с той лишь оговоркой, что возвращаемый тип реализации также должен быть определен, как и объединение вышеуказанных перегрузок. Спасибо!