2017-11-10 11 views
3

私はJavaScriptをES6に簡単な反復可能なクラスを書いた:単純なiterableクラスをJavaScriptからTypeScriptに書き換えるにはどうすればいいですか?

// JavaScript ES6 
 
class FooIterable { 
 
\t 
 
\t constructor(items){ 
 
\t \t this.data = items; 
 
\t } 
 
\t 
 
\t *[Symbol.iterator](){ 
 
\t \t for(let n of this.data){ 
 
\t \t \t yield n; 
 
\t \t } 
 
\t } 
 
} 
 

 
const foo = new FooIterable(['Bob','John','Mark']); 
 

 
for(let n of foo) console.log(n);

を今、私は活字体2.6上で同じことを書きたいです。これは私の試みです:

class FooIterable { 

    data: string[]; 

    constructor(items : string[]){ 
     this.data = items; 
    } 

    *[Symbol.iterator](){ 
     for(let n of this.data){ 
      yield n; 
     } 
    } 
} 
const foo = new FooIterable(['Bob', 'John', 'Mark']); 
for(let n of foo) console.log(n); 

しかし、私はオンラインエディタで、このようなエラーが表示されます。

enter image description here

どのように私は私が必要なものを行うことができますか?

+1

これは、typescriptターゲットがes6以上の場合に有効です。あなたのターゲットはtsconfigファイルのように表示されますか? Per Explosion Pills 'の答えでは、es6よりも低いターゲットのための 'downlevelIteration'フラグでも動作しますが、その下位レベルのパフォーマンスコストがあることに注意してください。 – CRice

+0

@CRice 'tsconfig'の' es6' –

答えて

3

イテレータを使用する場合は、downlevelIteration compiler optionが必要です。残念ながら、私はこのオプションが遊び場でどこに公開されているか分かりません。

Array.fromを使用すると、使用できる配列タイプに変換されるため、.fromはイテレータも内部的に使用します。

for (let n of Array.from(foo)) 

注:(などES6として)ネイティブで、この反復をサポートする目的のためにあなたがdownlevelIterationオプションは必要ありません。

関連する問題