如何在打字稿中使用 immer 对具有可选父项的嵌套字段进行赋值?

Fre*_*ind 8 typescript immer.js

当我有一个具有嵌套可选字段的对象时,例如:

type FormState = {
  aaa?: {
    bbb?: {
      ccc?: number
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当我想aaa.bbb.ccc在打字稿中设置值时,我必须:

import produce from "immer";

const formState: FormState = {}

const target = produce(formState, draft => {
  draft.aaa = draft.aaa ?? {}
  draft.aaa.bbb = draft.aaa.bbb ?? {}
  draft.aaa.bbb.ccc = 1;
})
Run Code Online (Sandbox Code Playgroud)

有什么办法可以让它变得更简单吗?

可选的链接语法在这里不起作用:

draft?.aaa?.bbb?.ccc = 1;  // compilation error
Run Code Online (Sandbox Code Playgroud)

一个小演示:https://github.com/freewind-demos/typescript-immer-set-value-to-nested-optional-fields-demo