Необязательный параметр для субъекта - PullRequest
0 голосов
/ 04 мая 2020

У меня есть тема в моей Angular Службе,

itemClicked: Subject<MenuTab | MenuLaunchTab, MenuItem>;

Проблема в том, что я хочу передать MenuItem только , когда я передаю MenuTab в качестве своего первого параметр, в то время как передать ничего в качестве моего второго параметра, когда первый параметр MenuLaunchTab.

Я хочу повторить то, что мы делаем для аргументов функции:

function(tab: MenuTab | MenuLaunchTab, item?: MenuItem)

1 Ответ

0 голосов
/ 04 мая 2020

Вам нужно объединить оба типа вместо использования объединения.

itemClicked: Subject<MenuTab, MenuItem> & Subject<MenuLaunchTab>;

сейчас itemClicked поддерживает оба типа Subject<MenuTab, MenuItem> и Subject<MenuLaunchTab>, но ни Subject<MenuTab>, ни Subject<MenuLaunchTab, MenuItem>.

Функция должна объединять все возможные типы своих переопределений. К сожалению, это означает, что нет другого способа, кроме

function(tab: MenuTab | MenuLaunchTab, item?: MenuItem)

Что вы можете сделать, это обнаружить типы в начале и затем разделить ваш поток.

function(tab: MenuTab | MenuLaunchTab, item?: MenuItem) {
  // or other check that fits, because their definition is unclear.
  const menuLaunchTab: MenuLaunchTab | undefined = item ? undefined : tab;
  const menuTab: MenuTab | undefined = item ? tab : undefined;
  if (menuTab) {
    handlerOfmenuTab(menuTab, item);
  } else if (menuLaunchTab) {
    handlerOfmenuLaunchTab(menuLaunchTab);
  }

}
...