12

我已经开始使用 typescript,很容易找到 angular.js 和 jquery 的声明 (d.ts) 文件。虽然找不到 SignalR jquery 的。

你们能帮帮我吗。我可以创建一个界面,extends JQuery但不知何故它不起作用......

var hub = $.connection.myHub

它在抱怨connection事情......说“'JQueryStatic'类型的值不存在属性'连接'”

4

5 回答 5

16

DefinitiveTyped 为SignalR提供了完整的 TypeScript 定义。

刚刚更新了链接,谢谢斯图尔特

于 2012-11-13T09:44:52.560 回答
8

这是我能够以一种快速而肮脏的方式准备的。请注意,它可能几乎不正确,但现在对我来说已经足够了,而且它似乎按预期工作。

开始可能是件好事。让我们称之为“jquery.signalR-0.5.3.d.ts”:

/// <reference path="jquery.d.ts" />
interface Hub {
    id: string;
    state: any;
    start(options?: any, callback?: () => any): JQueryPromise;
}

interface SignalR {    
    log(msg: string, logging: bool): void;
    isCrossDomain(url: string): bool;
    changeState(connection: any, expectedState: number, newState: number): bool;
    isDisconnecting(connection: any): bool;

    hub: Hub;
    connection: HubConnection;

    init(url, qs, logging): void;
    ajaxDataType: string;
    logging: bool;
    reconnectDelay: number;
    state: any;
    start(options?: any, callback?: () => any): JQueryPromise;
    starting(callback?: () => any): SignalR;
    send (data): SignalR;
    sending (callback?: () => any): SignalR;
    received (callback?: (data) => any): SignalR;
    stateChanged (callback?: (data) => any): SignalR;
    error (callback?: (data) => any): SignalR;
    disconnected (callback?: () => any): SignalR;
    reconnected (callback?: () => any): SignalR;
    stop (async? : bool): SignalR;
}

interface HubConnection extends SignalR {
    hub: Hub;
}

// extend JQuery interface
interface JQueryStatic {
    signalR: SignalR;
    connection: SignalR;
}

那么您可能想为您的集线器定义合同:

/// <reference path="./jquery.signalR-0.5.3.d.ts" />

interface IMyHub extends HubConnection {
    // your methods definition here
}

// extend SignalR interface
interface SignalR {
    myHub: IMyHub;
}
于 2012-11-09T22:44:02.217 回答
3

[自插]

我创建了一个工具来为您的集线器、方法以及您在客户端和服务器之间传递的类型生成 TypeScript 声明文件。它还包括最新的definitelyTyped signalr.d.ts 文件。我以 nuget 包的形式发布了 alpha 版本:SignalR.TypeScript。要安装此包,请在包管理器控制台中运行以下命令:

Install-Package SignalR.TypeScript -Pre 

我的博客上的更多信息和操作方法:http: //murat.girg.in/2013/11/introducing-signalr-typescript/

[/自插]

于 2013-11-13T06:12:21.190 回答
2

是不是这样:

interface signalR extends JQueryStatic {
     connection;
}

var hub = (<signalR>$).connection.myHub
于 2012-11-09T19:03:51.517 回答
0

这并不理想,但如果您需要将纯 signalR javascript 快速移动到 Typescript,您可以使用这样的接口(您仍然需要包含 signalr.d.ts 类型定义)。

interface SignalR {
    messageHub: any;
}

var chat = $.connection.messageHub;
chat.client.actionMessage = function (data) {
    console.info("actionMessage: received: message: " + data.message);
};
于 2015-08-31T13:51:25.230 回答