在 rxjs 中合并事件(Nestjs - saga cqrs)

merge events in rxjs (Nestjs - saga cqrs)

我在 nestjs 中使用 cqrs

我有一个传奇,基本上是它的 rxjs 实现

 @Saga()
  updateEvent = (events$: Observable<any>): Observable<ICommand> => {
    return events$.pipe(
      ofType(
        UpdatedEvent,
      ),
      map((event) => {

        return new otherCommand(event);
      })
    );
  };
}

问题是如何合并扩展相同的事件 class 所以我只希望 1 个传奇来捕获所有事件而不是每个事件的传奇

我试过了

ofType(
    UpdatedEvent,CreateEvent,DeleteEvent
  ),

但它不起作用,打字稿不允许这样做,而且由于通用类型,我得到了这个:

right-hand side of 'instanceof' is not callable

我的活动是这样的:

class UpdateEvent extends Base<UpdateDto>{
   constructor(){super()}
}
class CreateEvent extends Base<CreateDto>{
   constructor(){super()}
}

事件之间有区别的是Dtos

您可以使用 filter(x => x instanceof UpdatedEvent || x instanceof CreateEvent || x instanceof DeleteEvent)

而不是 ofType

如果这是您经常使用的模式,您可以轻松编写一个实用函数,例如 instanceOneOf,它在数组中获取一堆值并在内部进行 instanceof 检查。

然后你可以做类似filter(x => instanceOneOf([UpdatedEvent, CreateEvent, DeleteEvent], x))

的事情