类型 'object' 必须具有返回迭代器的 'Symbol.iterator' 方法。

18
data.technologies 是一个数组,我想获取该数组的输出。
这是 data.technologies 的输出形式:

enter image description here

this.profileService.getEntities().subscribe(data => {
  for (const technology of data.technologies) {
    console.log(technology);
  }
});

getEntities()的类型是Observable<IprofileData>

export interface IprofileData {  
  technologies: object;
}

TypeScript 给我报错:

TS2488: Type 'object' must have a 'Symbol.iterator' method that returns an iterator.

我做错了什么?


如果data是一个数组,那么data.technologies通常应该是未定义的,你无法迭代它。你的数组中的值是什么样子的?(字符串、对象等)。你期望输入的值是什么? - Christoph Lütjen
@ChristophLütjen 抱歉,我的错... data.technologies 返回的是一个数组,而不是 data - xRay
@Reaza,数据类型定义在哪里? - Maciej Sikora
@MaciejSikora data 的类型是一个接口,它看起来像这样:technologies: object; - xRay
你能否执行 console.log(data.technologies) 并提供输出结果给我们? - Emilien
显示剩余2条评论
4个回答

32

给未来的谷歌搜索者:

如果您忘记将函数输入参数对象化,也会返回此错误消息。

示例:

setCurrRowData(...currRowData, sort_order: num);

修复:

setCurrRowData( { ...currRowData, sort_order: num } );
//              ^                                 ^

10

运行时结构正确,它是一个数组,但是类型(来自您的评论)表明它只是一个对象。对象没有迭代器协议,而数组有。

应满足需求的示例类型:

type Data {
  ...// some other props
  technologies: string[] // change string into any type you have there
}

1

data.technologies是一个函数吗(您提到它“返回”了一个数组)?如果是这样,您只需要像这样调用它:

this.profileService.getEntities().subscribe(data => {
    for (const technology of data.technologies()) {
        console.log(technology);
    }
});

1
不是 data.technologies 是一个函数。我的意思是它的输出是一个数组。 - xRay
所以 data.technologies 是一个数组?你的措辞有点令人困惑,仅此而已。 - emeraldsanto
我已经添加了data.technologies的输出图像。 - xRay

0

我在尝试将一个对象解构为数组时遇到了这个错误,即
我正在尝试

const [mutation] = useMutation()

所需的是

const {mutation} = useMutation()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接