在 TypeScript 中克隆对象数组
Posted
技术标签:
【中文标题】在 TypeScript 中克隆对象数组【英文标题】:Cloning an array of objects in TypeScript 【发布时间】:2021-01-07 18:56:18 【问题描述】:我的界面中定义了如下对象数组:
myArray: [
id: number;
item: string;
checked: boolean;
]
我正在尝试使用以下语句克隆数组:
let newArray = myArray.map(x => Object.assign(,x));
当我尝试将新数组分配给原始数组时,出现以下错误:
Type ' id: number; item: string; checked: boolean; []' is not assignable to type
'[ id: number; item: string; checked: boolean; ]'.
Target requires 1 element(s) but source may have fewer
看起来对象数组正在转换为数组对象。
【问题讨论】:
myArray
被定义为 tuple,而不是 array 类型。你说过它应该只有一个条目。 .map
不做这样的保证。您的初始类型可能是错误的,或者如果您只有一个条目,则不需要 .map
。
将 myArray: [ id: number; item: string; checked: boolean; ]
更改为 myArray: id: number; item: string; checked: boolean; []
你们中的一个人应该回答这个问题,而不是评论。
【参考方案1】:
您遇到的问题在于 TypeScript 中元组和列表类型之间的差异。考虑以下示例Playground link:
type AsTuple = [number];
type AsArray = number[];
let myArrayA: AsArray = [];
let myArrayB: AsTuple = []; // This one errors
为什么第二个错误?这是因为AsArray
是一个数字数组,而AsTuple
是一个元组,其中第一个(也是唯一一个)项目是一个数字。空数组不符合AsTuple
类型;它必须是一个单项数组。
在您的示例中,您有:
myArray: [
id: number;
item: string;
checked: boolean;
]
它将myArray
定义为一个元组类型——它可以有一个项目,即一个对象。您可以通过将其设为数组类型来纠正它:
myArray:
id: number;
item: string;
checked: boolean;
[]
您可以在this playground link 中查看示例。
【讨论】:
以上是关于在 TypeScript 中克隆对象数组的主要内容,如果未能解决你的问题,请参考以下文章