8

我有一个在 webapp 中应用了 JavaScript 和 websocket 的 webapp,

现在,我想尝试将我的 webapp 移动到类型安全的 typescript,

问题是,当我声明和初始化 websocket 时,打字稿(在 Visual Studio 2012 中)生成错误:“属性 'WebSocket' 不存在于类型 'Window' 的值上”

但是在 JavaScript 中,websocket 正在运行并且没有错误,

这是代码:

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

在 JavaScript 中没关系,但在打字稿中它产生了错误,

我该如何解决这个问题?或者 Visual Studio 2012 中有没有办法忽略错误,以便可以构建打字稿?

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 回答