Введите аннотацию для Immutable.js Map при переходе на редуктор Redux - PullRequest
0 голосов
/ 01 сентября 2018

Я медленно добавляю аннотации типа Flow в небольшое приложение Redux. Однако я застрял при добавлении аннотации для состояния в редукторе.

Рассматриваемое приложение использует Immutable.js, а параметр состояния является экземпляром Immutable.Map. Как ни старайся, я не могу понять, как это комментировать.

Вот этот редуктор:

// @flow
import {List, Map, fromJS} from 'immutable';

type Action = {
  type: string,
  content: mixed
};

export default function(state = Map(), action: Action) {
  switch (action.type) {
  case 'ADD_LINK': {
    let links = state.get('links').push(fromJS(action.content));
    return state.set('links', links);
  }
  case 'UPDATE_FILTER':
    return state.set('filter', fromJS(action.content));
  default:
    return state;
  }
}

Есть идеи, как добавить аннотацию типа для состояния в виде карты Immutable.js? Я попробовал следующее безуспешно, и теперь я в тупике:

import type { Map } from 'immutable';

export default function (state: Map = Map(), action: Action) {

1 Ответ

0 голосов
/ 03 сентября 2018

Вы можете описать state следующим образом:

export default function(state: Map<string, mixed> = Map(), action: Action)
{
    // ...
}

Кроме того, есть лучший способ описать Action:

export type Action = {
    type: 'ADD_LINK' | 'UPDATE_FILTER'
  , content: mixed
};

Теперь будут обнаружены недействительные строки действия ...

Обратите внимание, что для вызова вашей функции вы должны явно преобразовать литерал объекта в Map:

let res = blah(Map({foo: 'bar'}), {type: 'ADD_LINK', content: 'blah-blah'});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...