Я пишу код, используя функцию различимого объединения TypeScript. Я полностью проверяю свойство «тип» для каждого типа в структуре if-else if
и назначаю переменную с помощью logi c в каждом блоке. Затем я возвращаю переменную. Однако я получаю сообщение об использовании возвращаемой переменной до ее назначения. Код следует этой структуре (это действительно простой пример, демонстрирующий проблему, поскольку мой реальный код намного сложнее):
interface One
{
num : "one";
value : string;
}
interface Two
{
num : "two";
value : number;
}
interface SomeComplexObject
{
// Complex properties
}
type Num = One | Two;
function isOne(
obj : Num
) : SomeComplexObject
{
let complex : SomeComplexObject;
if (obj.num === "one")
{
// Create a complex object with one set of parameters
}
else if (obj.num === "two")
{
// Create a complex object with a second set of parameters
}
return complex;
}
Моя первая мысль заключалась в том, чтобы добавить последний else
, чтобы выдать сообщение об ошибке что (в данном случае) значение для num
недопустимо, но поскольку другие условия являются исчерпывающими, obj
имеет тип never
и не может быть использован.
Я мог бы выбросить super generi c, и покончить с этим, но мне интересно, почему компилятор считает, что complex
может быть неопределенным, но в то же время признает, что условия являются исчерпывающими. Что-то мне не хватает?
Edit : Мой исходный пример, похоже, вызвал некоторую путаницу. Я обновил его, чтобы, надеюсь, лучше представить реальную проблему.