TypeScript:[Symbol.iterator]的实现:为什么它不';不做单元测试(Karma&x2B;Jasmine?

TypeScript:[Symbol.iterator]的实现:为什么它不';不做单元测试(Karma&x2B;Jasmine?,typescript,Typescript,我的接口定义了迭代器: [Symbol.iterator]() : IterableIterator<IDocument>; 在调试模式下,我看到这一点。_documents有三个文档,但此代码不重复: let m = 0; for(let n of app.documentManager){ ++m; } // here m == 0 still... 所以迭代没有发生,我做错了什么 UPD 例如,它在JavaScript中工作: let collection = {

我的接口定义了迭代器:

[Symbol.iterator]() : IterableIterator<IDocument>;
在调试模式下,我看到
这一点。_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);
}
为什么我有打字脚本的问题

UPD2


哦,现在我看到它不仅在单元测试(
Karma
+
Jasmine
)上有效,而且在
Node.js
上也能正常工作。但是我也需要我的单元测试工作……((

我不确定你做错了什么,但这里有一些编译和运行良好的typescript代码:

interface IterateNum {
  [Symbol.iterator](): IterableIterator<number>;
}

class Collection implements IterateNum {
    private items = [1,2,3,4]; // can be Array<T>

    constructor() {}

    *[Symbol.iterator]() {
        for(let i of this.items) {
            yield i;
        }
    }
}

for(let n of (new Collection())) {
    console.log(n);
}
接口迭代枚举{
[Symbol.iterator]():IterableIterator;
}
类集合实现了IterateNum{
私有项=[1,2,3,4];//可以是数组
构造函数(){}
*[符号.迭代器](){
对于(让我考虑一下这个项目){
产量一;
}
}
}
for(设n个新集合()){
控制台日志(n);
}
我编写了上面的代码,并复制了您的
tsconfig.json
,运行
tsc
node dist/file.js
工作正常。您的代码可能有其他问题。请尝试编写一个最小的独立脚本,以获得您感兴趣的协作部分,并隔离调用站点


有关此功能集的一般说明:

您需要实现接口(下一个函数),而不仅仅是生成值

下电平发射的
有一些奇怪之处,因此请确保您的tsconfig设置正确。()


注意-值得一提的是,这个问题略有不同,但链接的答案明确谈到了一个更像此OP所寻找的Iterable版本。

您可以发布您的
tsconfig.json
、typescript版本以及传递给
tsc
的任何命令行标志吗?我在答案有特定的标志并排除特定的发射级别。@Seannell,我在GitHub上发布了我的代码示例:。我的测试“#Iterator iterates the documents.”失败。你的JS示例可以在Typescript中工作(应该如此),让我试着编写一个类似的类…在我的项目中,它是
DocumentManager
类。运行正常:D在迭代器上使用/不使用类型显式注释。编辑我的答案…@AndreyBushman值得注意的是,我已经安装了
节点v8.5.0
,不确定它还可能是什么您的typescript版本/配置似乎正常。我的节点版本是v8.6.0I添加了UPD 2部分。有趣的更新-我不知道如何进一步指导您,也许可以尝试调查
karma typescript
,看看它是否不尊重您的
es6
编译器选项?我安装了
karma-typescript-es6-transform
,并添加了但问题仍然存在。
interface IterateNum {
  [Symbol.iterator](): IterableIterator<number>;
}

class Collection implements IterateNum {
    private items = [1,2,3,4]; // can be Array<T>

    constructor() {}

    *[Symbol.iterator]() {
        for(let i of this.items) {
            yield i;
        }
    }
}

for(let n of (new Collection())) {
    console.log(n);
}