Определение условного типа в среде IDE в операторе If

#typescript #types #react-typescript

Вопрос:

С типом, указанным для двух форматов, в зависимости от значения одного из ключей, например так

 type singleOrMultiValue = {isSingle: true, value: string} | {isSingle: false, set: Array<string>}
 

Я могу использовать его для защиты от таких ошибок, как const val : singleOrMultipleValue = {isSingle: false, value: '1'} .

Но пытаясь определить, что такое тип переменной во время выполнения, я бы попытался:

 if (val.isSingle) {
   console.log(val.value)
} else {
   console.log(val.set[0])
}
 

Но это даст мне ошибку типа value не существует по типу singleOrMultiValue для {isSingle: false} . Есть ли способ написать это так, чтобы среда IDE понимала, что в этой области видимости тип имеет isSingle значение true? Или это единственный способ явным образом объявить другую переменную для соответствия / использования as any ?

Спасибо!

Комментарии:

1. Кажется, работает: typescriptlang.org/play? #код/…

2. Эй, Тициан — я скопировал точный код в VS Code, и он выдает то же предупреждение set , что не существует по типу. Смотрите мой ответ ниже о решении.

3. Тогда у вас не будут включены строгие проверки на нуль

Ответ №1:

Найдено решение — VS-код может распознавать значение в операторе if, но только если вы пишете else if (val.isSingle == false) , а не else if (!val.isSingle) или else { .