7

まず第一に、私は ng2 と typescript にまったく慣れていません。

私が達成しようとしているのは、Angular2 コンポーネントに Server-Sent イベントを実装することです。ここの初期の投稿で言及されている例に従いましたが、私の問題は、「EventSource」オブジェクトが認識されないことです (VS Code の赤い下線)。

いくつかの参照が欠落しているかどうかわかりません...私の参照は次のとおりです。

<!-- IE required polyfills, in this exact order -->
  <script src="node_modules/es6-shim/es6-shim.min.js"></script>
  <script src="node_modules/systemjs/dist/system-polyfills.js"></script>
  <script src="node_modules/angular2/es6/dev/src/testing/shims_for_IE.js"></script>
  <script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
  <script src="node_modules/systemjs/dist/system.src.js"></script>
  <script src="node_modules/rxjs/bundles/Rx.js"></script>
  <script src="node_modules/angular2/bundles/angular2.dev.js"></script>

これは、eventsource クライアントを実装した方法です。

   ngOnInit() {
      const observable = Observable.create(observer => {
        const eventSource = new EventSource(/API_URL); //Cannot find EventSource
        eventSource.onmessage = x => observer.next(x.data);
        eventSource.onerror = x => observer.error(x);

        return () => {
            eventSource.close();
        };
    });

    observable.subscribe({
        next: guid => {
            this.zone.run(() => this.someStrings.push(guid));
        },
        error: err => console.error('something wrong occurred: ' + err)
    });
4

3 に答える 3

6

実際、TypeScript には次の 2 つの機能があります。

  • コンパイル時間。コンパイラは、構文エラーと型をチェックします。型に関してはd.ts、オブジェクト/クラスのコントラクトを記述したファイルに見られるファイルに依存しています。
  • 実行時間。オブジェクトが実行環境に存在する場合、コードが実行されます。

あなたの場合、問題はコンパイル時にあります。

EventSource の d.ts ファイルのサンプルは次のとおりです: https://github.com/sbergot/orgmodeserver/blob/master/src/ts/deps/EventSource.d.ts

次のようにして、TypeScript ファイルの先頭で取得して参照できます。

/// <reference path="../<path-to>EventSource.d.ts"/>
于 2016-05-03T12:11:04.890 に答える