【问题标题】:Optional Parameter for a Subject主题的可选参数
【发布时间】:2020-05-04 18:35:59
【问题描述】:

我的 Angular 服务中有一个主题,

itemClicked: Subject<MenuTab | MenuLaunchTab, MenuItem>;

问题是,当我将MenuTab 作为我的第一个参数传递时,我想传递MenuItem only,而在第一个参数传递 nothing 作为我的第二个参数时参数为MenuLaunchTab

我想复制我们对函数参数所做的:

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

【问题讨论】:

标签: angular typescript rxjs subject


【解决方案1】:

你需要结合这两种类型而不是联合使用。

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

现在itemClicked 支持Subject&lt;MenuTab, MenuItem&gt;Subject&lt;MenuLaunchTab&gt; 但既不支持Subject&lt;MenuTab&gt; 也不支持Subject&lt;MenuLaunchTab, MenuItem&gt;

一个函数应该联合所有可能的覆盖类型。 不幸的是,这意味着除了

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);
  }

}

【讨论】:

  • 总是欢迎提供代码解释,与没有解释的代码行相比,通常会导致更多的赞成票和更少的反对票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
相关资源
最近更新 更多