【发布时间】:2018-04-16 10:48:13
【问题描述】:
我的接口定义了迭代器:
[Symbol.iterator]() : IterableIterator<IDocument>;
我的班级DocumentManager 实现了这个接口:
*[Symbol.iterator](): IterableIterator<IDocument>{
for(let n of this._documents){// this._documents is Array<IDocument>
yield n;
}
}
在调试模式下,我看到this._documents 有三个文档,但是这段代码没有迭代:
let m = 0;
for(let n of app.documentManager){
++m;
}
// here m == 0 still...
所以迭代不会发生。我做错了什么?
UPD
例如,它适用于 JavaScript:
let collection = {
items : ['a','b','c','d','e'],
*[Symbol.iterator](){
for(let item of this.items){
yield item;
}
}
};
for(let n of collection){
console.log(n);
}
为什么我的 TypeScript 有问题?
UPD2
哦,现在我发现它不仅适用于单元测试 (Karma + Jasmine),而且适用于 Node.js。但我也需要我的单元测试工作...... :(((
【问题讨论】:
-
您能否将您的
tsconfig.json、typescript 版本以及您传递给tsc的任何命令行标志发布?我在答案中发布的一些链接具有特定的标志并排除了某些发射级别。 -
@SeanNewell,我在 GitHub 上发布了我的代码示例:github.com/Andrey-Bushman/webstorm-using。我的测试“#Iterator 迭代文档”。失败了。
-
您的 JS 示例在 Typescript 中工作(应该如此),让我尝试编写一个可编译为类似内容的类...
-
在我的项目中,是
DocumentManager类。 -
得到了一些工作:D 在迭代器上有/没有类型显式注释。正在编辑我的答案...
标签: typescript