Immer редуктор не работает с Typescript - PullRequest
0 голосов
/ 14 мая 2019

У меня проблема с редуктором, созданным immer.js в TypeScript.

Я не понимаю следующее:

Когда я использую литерал объекта {} в работах с неизменяемостью исходного состоянияхорошо, но однажды

const byId = (state = {}, action) =>
    produce(state, draft => {
        switch (action.type) {
            case RECEIVE_PRODUCTS:
               ...
)
        }
    })

Я изменяю литерал на экземпляр неизменяемости объекта прекращает работу

const byId = (state = new SomeObject(), action) =>
    produce(state, draft => {
        switch (action.type) {
            case RECEIVE_PRODUCTS:
               ...
)
        }
    })

Можете ли вы кто-нибудь понять, почему?

Спасибо ..

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Я создал родительский объект

export class Immerable {
  public [immerable] = true;
}

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

0 голосов
/ 15 мая 2019

Обычно вы хотите, чтобы первый аргумент produce был простым объектом или массивом.

По желанию это может быть "неизмеримый класс", хотя я не знаю, что конкретно это будет (для меня это звучит как внутренняя вещь), но маловероятно, что ваш new SomeObject() вызов вернет.

https://github.com/immerjs/immer/blob/master/src/immer.js#L61

Если первый аргумент produce не является одним из них, он не будет "составлен".

https://github.com/immerjs/immer/blob/master/src/common.js#L20

...