Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 对象分解的特殊行为_Typescript_Destructuring_Typescript2.7 - Fatal编程技术网

Typescript 对象分解的特殊行为

Typescript 对象分解的特殊行为,typescript,destructuring,typescript2.7,Typescript,Destructuring,Typescript2.7,我有以下资料: @Action( RsRosCoughUiUpdate ) rsRosCoughUiUpdate( { getState, patchState }: StateContext<IRs>, payload: IFormState ) { console.log( `classToPlain(payload) | ${JSON.stringify( classToPlain(payload) ) }` ) console.log('PAYLOAD

我有以下资料:

  @Action( RsRosCoughUiUpdate )
  rsRosCoughUiUpdate( { getState, patchState }: StateContext<IRs>, payload: IFormState ) {
    console.log( `classToPlain(payload) | ${JSON.stringify( classToPlain(payload) ) }` )
    console.log('PAYLOAD', payload)
    console.log('PAYLOAD STATUS', payload.status)
    console.log('PAYLOAD STATUS', payload['status'])
    console.log( `change-before | ${JSON.stringify( payload.change ) }` )
    console.log(classToPlain(payload))
    console.log( `change-after | ${JSON.stringify( payload.change ) }` )

    let {change, dirty, pristine, status, target, touched, untouched} = payload

    console.log(change, dirty, pristine, status, target, touched, untouched)

    const nextState = produce( getState(), draftState => {
      let {change, dirty, pristine, status, target, touched, untouched} = payload
      console.log( `change | ${JSON.stringify( payload.change ) }` )
//       draftState.ros.ui.cough = payload



//      draftState.ros.ui.cough =    {...payload}
//      draftState.ros.ui.cough.change = payload.change
//      draftState.ros.ui.cough.dirty = payload.dirty
//      draftState.ros.ui.cough.pristine = payload.pristine
//      draftState.ros.ui.cough.status = payload.status
//      draftState.ros.ui.cough.target = payload.target
//      draftState.ros.ui.cough.touched = payload.touched
//      draftState.ros.ui.cough.untouched = payload.untouched
    } )

    patchState( { ...getState(), ...nextState } )
  }
删除所有调试信息并执行console.logpayload会产生以下结果

问题: 1.为什么解构值总是未定义? 2.为什么负载对象图的点遍历总是未定义


干杯

如我的评论所示,您可以在这里看到问题:

console.log('PAYLOAD', payload);
现在,如果检查控制台结果,您将获得以下日志:

rs.store.ts:73 PAYLOAD RsRosCoughUiUpdate {payload: FormState}.
它说payload是一个rsroscouguiudpate,一个具有FormState类型的payload属性的对象。我假设FormState是一种符合您的FormState接口的类型

因此,当然:

console.log(payload.change);
显示未定义的

要获取您的值,您的分解应该是:

let {change, dirty, pristine, status, target, touched, untouched} = payload.payload

也许您应该更改有效负载变量的名称,因为它不是您认为的那样。

不能确定。。。但在我看来,您想要的负载不是可变负载,而是负载。payload@Gerrit0以前尝试过,但没有多大成功。它错误地说有效负载不是IFormState上的属性。请看我刚才添加的图形。Cheers IFormState定义没有名为payload的属性并不意味着变量payload没有。当然,根据IFormState的定义,TypeScript可能会提出抗议,但是,有效负载值从何而来?服务?可能您没有得到预期的结果,因此,要么出现TypeScript编译错误,要么在运行时未定义属性。请记住,接口只是告知编译器数据结构的一种方式,它本身并不真实。如果定义错误,您会得到意想不到的结果伟大的分析!你说得太对了。有效负载的类型为RSROSCOUGUIUPDATE,包含类型为IFormState的实际有效负载。我将重新命名以纠正混淆。谢谢
let {change, dirty, pristine, status, target, touched, untouched} = payload.payload