Итак, у меня есть следующий код:
type Something =
| { t: 'A', src: string }
| { t: 'B', src: string }
| { t: 'C', src: number };
const f = (o: Something): string =>
o.t === 1
? o.src
: 'a-string';
Я ожидаю увидеть ошибку, когда вернусь o.src
, когда o.t
равно 1, поскольку я никогда не определял, что t
может быть числом. Следовательно, поток не знает, какой тип o.src
, если t
это число. Но это работает без каких-либо ошибок. Что мне здесь не хватает?
Вот поток / попытка .
Для записи, Версия TypeScript правильно выдает ошибку. Хотя сообщение об ошибке не очень полезно.
Чтобы уточнить немного, если я вместо этого использую o.t === 'F'
, поток с радостью выдаст следующую ошибку:
9: ot === 'F' ^ все ветви несовместимы: любой объект со свойством t
, совпадающим со строковым литералом F
1 , несовместим со строковым литералом A
2 . Или объект со свойством t
, соответствующим строковому литералу F
1 , несовместим со строковым литералом B
[3]. Или объект со свойством t
, соответствующим строковому литералу F
1 , несовместим со строковым литералом C
[4].
Рекомендации:
9: o.t === 'F' ^ 1
4: | {t: 'A', src: string}
^ 2
5: | {t: 'B', src: string}
^ [3]
6: | {t: 'C', src: number};
^ [4]
Я не знаю почему, но это просто непоследовательное поведение, и я ожидаю увидеть некоторую ошибку, если я использую значение, которое не определено в типе. Вы знаете, как недоступный кусок кода.