2016-06-28 3 views
3

http://www.html5rocks.com/en/tutorials/frameworks/angular-websockets/のチュートリアルの後にnode.jsサーバーとangular.jsクライアントにsocket.ioを実装すると、すべて正常に動作します。Typescript:TS2496: 'arguments'オブジェクトは、ES3およびES5の矢印機能で参照できません。

しかし、クライアント側、活字体の表示次のコンパイルエラー:

TS2496: The 'arguments' object cannot be referenced in an arrow function in ES3 and ES5. Consider using a standard function expression. 

については、以下のサービスコードは:

on(eventName:string, callback) { 
    this.socket.on(eventName,() => { 
    var args = arguments; // <-- here the compilation error 
    this.$rootScope.$apply(() => { 
     callback.apply(this.socket, args); 
    }); 
    }); 
} 

emit(eventName:string, data, callback?) { 
    this.socket.emit(eventName, data,() => { 
    var args = arguments; // <-- here the compilation error 
    this.$rootScope.$apply(() => { 
     if (callback) { 
     callback.apply(this.socket, args); 
     } 
    }); 
    }); 
} 

私は、https://github.com/Microsoft/TypeScript/issues/1609の最初の記事で説明したものと同様に、さまざまなソリューションを試してみましたコンパイルを修正しますが、socket.ioの "on"機能を無効にします(jsonオブジェクトはもう解釈されません)。

このタイスクリプトのコンパイルエラーを修正または無視するにはどうすればよいですか?

答えて

2

代わり()=>

on(eventName:string, callback) { 

     var self = this; 
     this.socket.on(eventName, function() { 
      var args = arguments; 
      self.$rootScope.$apply(() => { 
       callback.apply(self.socket, args); 
      }); 
     }); 
    } 
+0

引数が、代わりに親クロージャからのものを使用してください。 MDNリンクhttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions – toskv

+0

を使用することができません。 – toskv

+1

ここに投稿する前に、私は "()=>"の代わりに "function"を使ってみましたが、これの代わりに自分自身を見逃しました。この解決策は、魅力のように機能します。クイックアンサー –

4

の使用function別の可能性はなくargumentsrest parameterを使用することです。、それは矢印関数は、この自分自身を結合しないことを言及する価値があります

on(eventName:string, callback) { 
    this.socket.on(eventName, (...args) => { 
    this.$rootScope.$apply(() => { 
     callback.apply(this.socket, args); 
    }); 
    }); 
} 
+0

は、与えられたリンクから残りのパラメータについて少し学びました。乾杯! – Pragun

関連する問題