Изменение приватных полей с помощью immer.js - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь изменить приватное поле из метода того же класса с помощью 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 голосов
/ 24 октября 2019

Вы можете привести 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;
        })
    }
}
...