12 votes

Fichier de déclaration de type SignalR

J'ai commencé à utiliser typescript, j'ai trouvé facilement des fichiers de déclaration (d.ts) pour angular.js et jquery. Mais je n'en ai pas trouvé pour SignalR jquery.

Pouvez-vous m'aider ? Je pourrais juste créer une interface qui extends JQuery mais d'une manière ou d'une autre, ça ne fonctionne pas...

var hub = $.connection.myHub

il se plaint de connection ... dit "La propriété 'connexion' n'existe pas sur la valeur de type 'JQueryStatic'".

16voto

George Mavritsakis Points 2778

DefinitelyTyped a une définition TypeScript complète pour SignalR.

Je viens de mettre à jour le lien, merci Stuart

8voto

Slawek Points 644

Voici ce que j'ai pu préparer de manière rapide et sale. Sachez que c'est probablement à peine correct, mais cela me suffit pour le moment, et cela semble fonctionner comme prévu.

Ça pourrait être une bonne chose pour commencer. Appelons-le "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;
}

alors vous pourriez vouloir définir un contrat pour votre hub :

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

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

// extend SignalR interface
interface SignalR {
    myHub: IMyHub;
}

3voto

Murat G. Points 181

[Self-plug]

J'ai créé un outil pour générer des fichiers de déclaration TypeScript pour vos hubs, méthodes et les types que vous passez entre le client et le serveur. Il inclut également le dernier fichier signalr.d.ts de DefinitelyTyped. J'ai publié une version alpha sous forme de paquet nuget : SignalR.TypeScript. Pour installer ce paquet, exécutez la commande suivante dans la console du gestionnaire de paquets :

Install-Package SignalR.TypeScript -Pre 

Plus d'informations et de conseils sur mon blog : http://murat.girg.in/2013/11/introducing-signalr-typescript/

[/Self-plug]

2voto

Agzam Points 4872

Je l'ai fait comme ça :

interface signalR extends JQueryStatic {
     connection;
}

var hub = (<signalR>$).connection.myHub

0voto

hlo Points 77

Ce n'est pas idéal, mais si vous avez besoin de transférer rapidement du javascript pur de SignalR vers Typescript, vous pouvez utiliser une interface comme celle-ci (vous devrez toujours inclure la définition de type signalr.d.ts).

interface SignalR {
    messageHub: any;
}

var chat = $.connection.messageHub;
chat.client.actionMessage = function (data) {
    console.info("actionMessage: received: message: " + data.message);
};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X