【问题标题】:typescript how to do object destructured assignment打字稿如何进行对象解构赋值
【发布时间】:2019-09-18 15:52:22
【问题描述】:

我有一些打字稿代码,如下所示:

transform( payload: object ) {
    const { count = 0, malfunctions = [] } : { count: number, malfunctions: Array<object> } = payload;
}

打字稿编译器给我错误:

"error TS2322: Type 'object' is not assignable to type '{ count: number; malfunctions: object[]; }'."

现在我对 typescript 相当陌生,但在我看来,编译器告诉我:“你不能将对象类型 'payload' 分配给类型为 number 和 array 的解构变量。”

如果这是真的,那么我应该如何在 typescript 中进行解构赋值?

【问题讨论】:

  • 在你的赋值语句右侧尝试={...payload}。
  • 您到底想达到什么目的?您是否尝试提取属性count 和malfunctions?
  • @jpavel - 这不起作用 - 打字稿似乎不允许对象休息参数

标签: angular typescript


【解决方案1】:

我想通了-需要在参数中执行解构:

transform( { count = 0, malfunctions = [] } : { count: number, malfunctions: Array<object> } ) {

}

【讨论】:

  • 您不必“在参数中执行解构”,您只需要有参数的类型。问题是 object 不能被解构,因为它是一个模糊的类型。所以 transform( payload: { count: number, malfunctions: Array&lt;object&gt; } ) 使用你的原始代码就可以了。
  • 嗯,是的,我也可以这样做,但我仍然需要稍后解构对象或通过点符号访问对象上的属性,对吧?
  • 你会像const { count = 0, malfunctions = [] } = payload一样解构——问题还是object的使用
  • 当你说 'const { count = 0, faults = [] } = payload' - 这就是我的意思是'我以后仍然需要解构对象'
  • 是的,您可以在参数分配或稍后进行解构...但无论如何,原始错误与此无关。
猜你喜欢
  • 2019-12-01
  • 2019-12-12
  • 2021-07-22
  • 2018-06-08
  • 2021-12-03
  • 2019-05-28
  • 1970-01-01
  • 2021-04-25
  • 2021-02-09
相关资源
最近更新 更多