#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 {
.