如何在TypeScript中预测地图?获取错误代码TS2349

时间:2017-05-31 11:05:34

标签: angular typescript

我有以下映射,将字符串映射到任何类型的数组:

public schedule : { [dayName: string]: any[] };

当我试图预测每个键值映射时:

this.schedule.forEach(dayName, day){...}

我收到以下错误:

TS2349:无法调用类型缺少调用签名的表达式。“

3 个答案:

答案 0 :(得分:2)

属性schedule不是数组。它是一个可以用字符串索引的对象,该值的类型为any[]。见documentation on indexable types.

也许你打算在访问索引后循环它:

this.schedule["somekey"].forEach(...);

或者,如果您想要遍历schedule的密钥,请使用Object.keys

Object.keys(this.schedule).forEach(...);

答案 1 :(得分:2)

由于schedule被定义为具有字符串索引签名的简单对象,因此它缺少forEach方法。但是,它认为对象中有forEach属性any[]类型。并且它需要不可调用,因此错误。

要迭代对象的属性,可以使用Object.keys函数:

Object.keys(schedule).forEach((scheduleProp) => /* do something with schedule[scheduleProp] */);

实现目标的其他方法是使用Map

public schedule: Map<string, any[]>;

// ...

schedule.forEach((value, key) => /* ... */);

答案 2 :(得分:1)

没有Ecmascript版本曾向对象添加方法forEach。它存在于数组中。

ES6的地图也有forEach方法,但你在这里有一个用作地图的对象。

有很多方法可以迭代对象的键(和值),我会给你一个:

Object.keys(this.schedule).forEach(dayName => console.log(this.schedule[dayName]))