Javascript: какой тип потока использовать для элементов списка в списке, содержащем несколько типов - PullRequest
1 голос
/ 20 июня 2019

Рассмотрим список объектов, содержащих экземпляры типа 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,
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...