Immer reducer 不适用于 Typescript

Immer reducer does not work with Typescript

我在使用 TypeScript immer.js 创建的 reducer 时遇到问题。

我不明白以下内容:

当我在初始状态下使用对象字面量 {} 时,不变性工作正常,但只有一次

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:
               ...
)
        }
    })

有人知道为什么吗?

谢谢..

您通常希望 produce 的第一个参数是普通对象或数组。

可选地,它可以是 "immerable class",虽然我不熟悉它具体是什么(对我来说听起来像是内部的东西)但它不太可能是你的 new SomeObject() 所说的 returns.

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

如果 produce 的第一个参数不是其中之一,那么它就不会是 "drafted"。

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

我已经创建了父对象

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

以及我需要在 produce 函数中使用的所有 类 都有这个父级。谢谢