使用immer.js修改私有字段

时间:2019-10-24 10:21:37

标签: typescript immer.js

我正在尝试使用immer.js从同一类的方法更改私有字段,但是在这种情况下,我需要访问的不是this,而是访问同一类的草稿实例。这会导致错误。

import produce from "immer";

export class Test {
    private foo: number = 0;
    bar(foo: number): Test {
        return produce<Test>(this, draft => {
            draft.foo = foo;    // <- TS2339: Property 'foo' does not exist on type '{ bar: (foo: number) => Test; }'.
        })
    }
}

有没有某种方法可以使用immer.js而不将字段变成公共字段?

1 个答案:

答案 0 :(得分:0)

您可以将draft强制转换为any,然后访问未键入的foo。

import produce from "immer";

export class Test {
    private foo: number = 0;
    bar(foo: number): Test {
        return produce<Test>(this, draft => {
            (draft as any).foo = foo;
        })
    }
}