打字稿如何进行对象解构赋值

Posted

技术标签:

【中文标题】打字稿如何进行对象解构赋值【英文标题】: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 您到底想达到什么目的?您是否尝试提取属性countmalfunctions @jpavel - 这不起作用 - 打字稿似乎不允许对象休息参数 【参考方案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' - 这就是我的意思是'我以后仍然需要解构对象' 是的,您可以在参数分配或稍后进行解构...但无论如何,原始错误与此无关。

以上是关于打字稿如何进行对象解构赋值的主要内容,如果未能解决你的问题,请参考以下文章

ES6 解构赋值

ES6变量的解构赋值对象的解构赋值

[JavaScript]解构赋值详解

使用打字稿在reduce方法中使用扩展语法进行解构

解构赋值的用途

JavaScript ES6 - 解构赋值