8

JavaScript と websocket が webapp 内に適用された webapp があります。

今、私は自分の webapp をタイプセーフな typescript に移行したかったのですが、

問題は、websocket を宣言して初期化すると、typescript (Visual Studio 2012) がエラーを生成することです:「プロパティ 'WebSocket' は型 'Window' の値に存在しません」

しかし、JavaScript では websocket が実行され、エラーは発生せず、

これはコードです:

var Socket = window.WebSocket || window.MozWebSocket;

JavaScript では問題ありませんが、typescript ではエラーが発生しました。

どうすればこれを解決できますか? または、Visual Studio 2012 でエラーを無視して typescript をビルドできるようにする方法はありますか?

4

3 に答える 3

7

次のようにプロパティにアクセスしてみてください。

var Socket = window['WebSocket'] || window['MozWebSocket'];

文字列インデクサーを使用すると、コンパイル時の検証が回避され、動的操作が可能になります。

于 2012-11-20T20:09:40.197 に答える
1

TypeScriptの新しいバージョンの変更に対応するために回答を更新しました...

MozWebSocketがWebSocketと同一である場合、次の方法で問題を解決できます。

declare var MozWebSocket: {
    prototype: WebSocket;
    new (url: string): WebSocket;
    new (url: string, prototcol: string): WebSocket;
    new (url: string, prototcol: string[]): WebSocket;
    OPEN: number;
    CLOSING: number;
    CONNECTING: number;
    CLOSED: number;
}

var Socket: typeof WebSocket = WebSocket || MozWebSocket;

var socket = new WebSocket('url');
于 2012-10-25T13:03:59.023 に答える
0

ウィンドウ定義を拡張できます (「window.extend.d.ts」と呼びます):

interface Window {
     WebSocket: any;
     MozWebSocket: any;
}

TypeScript 0.8.3.0 で動作

于 2013-05-28T18:58:24.277 に答える