Рассмотрим список объектов, содержащих экземпляры типа A
и B
:
type A = { type: 1 | 2, foo: string };
type B = { type: 1 | 2, bar: number };
Для обработки событий щелчка элемента у меня также есть тип объединения:
type ListItem = A | B;
События кликов обрабатываются в:
const handleListItemClicked = (listItem: ListItem) => {
if (listItem.type === 1) // by convension, 1 === type A
[...]
};
Я видел этот паттерн в нескольких местах изучения javascript и Flow.Мне кажется опасным, так как возможно совершать ошибки типа, которые поток не уловит - например:
handleListItemClicked({type: 1, bar: 42}); // will fail
Что является хорошим и безопасным способом решения этого типапроблема?Поскольку в Flow нет интерфейсов или наследования, я могу думать только об объединении обоих типов (см. Ниже), но надеюсь найти более идиоматическое решение.
type ListItem2 = {
a: A,
b: B,
}