在打字稿的“ for of”中使用“ as”?

时间:2019-12-13 23:56:36

标签: typescript

我有一个通用的排序Map对象(SortedMap),其中存储了实现“ MapItem”接口的所有类型的对象。

我还有一个Fringe类,它实现了此MapItem接口,该接口存储在我的SortedMap中。 SortedMap.list返回其中存储的元素的数组。

在一个仅将“边缘”放入地图中的应用程序中,我正在尝试迭代SortedMap数组并使用边缘进行操作。

尝试构造迭代器,我尝试了以下方法:

for (let fringe of this._activeFringes.list as Fringe) {
  //call various methods of Fringe class.

}

这会生成编译器错误。

但是我可以做到这一点而无需抱怨:

for (let fringe of this._activeFringes.list) {
    let myFringe = fringe as Fringe;
    //call various methods of Fringe class.
}

不确定为什么编译器会抱怨迭代器中的类型转换,而不会抱怨主体内部的类型转换,但是无论如何,是否想知道是否有某种简洁的方法可以做到这一点而无需赋值?

1 个答案:

答案 0 :(得分:0)

这里的根本原因

const results = products
.filter(p => !p.featured)
.slice(0, 4)
.map(p => (
    <div key={p.id} className="product">
        <Product />
    </div>
));

您应该改用for (let fringe of this._activeFringes.list as Fringe) {