Общий тип для действий ngrx в Angular 7 - PullRequest
0 голосов
/ 16 января 2019

У меня динамическое действие:

export class ChangeCurrentConfig implements Action {
  readonly type = ActionTypes.ChangeCurrentConfig;

  constructor(public payload: { key: string, value: any }) {}
}

Где key - динамический ключ редуктора. Например у меня есть:

interface Config1 {
  myPath1: string
}

interface Config2 {
  myPath2: string
}

И я загружаю их динамически в CurrentConfig редуктор. И в эффектах каждого конфига я обрабатываю изменения для каждого конфига. Например Config1 эффект:

@Effect()
  changeMyPath1$ = this.actions$.pipe(
    ofType(ChangeMyPath1),
    map((action: ChangeMyPath1) => action.payload.myPath1),
    map(value => {
      return new ChangeCurrentActivityConfig({
        key: 'myPath1',
        value,
      });
    })
  );

Проблема в том, что в этой строке легко ошибиться key: 'myPath1',. Я хочу предотвратить это с помощью общего действия ChangeCurrentConfig. Я попробовал:

export class ChangeCurrentConfig<T> implements Action {
  readonly type = ActionTypes.ChangeCurrentConfig;

  constructor(public payload: { key: keyof T, value: any }) {}
}

Работает хорошо, но я хочу сделать этот универсальный тип обязательным для новых экземпляров класса. Так что, если я напишу в эффектах new ChangeCurrentActivityConfig без универсального типа, это покажет ошибку. Как я могу этого добиться?

...