Ответ 1
DefinitelyTyped имеет полное определение TypeScript для SignalR.
Просто обновил ссылку, спасибо Stuart
Я начал использовать typescript, легко нашел файлы декларации (d.ts) для angular.js и jquery. Невозможно найти его для jQuery SignalR.
Можете ли вы, ребята, помочь мне. Я мог бы просто создать интерфейс, который extends JQuery
, но как-то он не работает...
var hub = $.connection.myHub
он жалуется на connection
вещь... говорит: "Свойство" connection "не существует по значению типа" JQueryStatic "
DefinitelyTyped имеет полное определение TypeScript для SignalR.
Просто обновил ссылку, спасибо Stuart
Вот что я смог приготовить быстро и грязно. Имейте в виду, что это, вероятно, едва ли правильно, но это достаточно для меня прямо сейчас, и, похоже, оно работает по назначению.
Это может быть неплохо начать. Давайте назовем его "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;
}
[Self-штекер]
Я создал инструмент для создания файлов декларации TypeScript для ваших концентраторов, методов и типов, которые вы передаете между клиентом и сервером. Он также включает в себя последний файл definifiedTyped signalr.d.ts. Я выпустил альфа-версию как пакет nuget: SignalR.TypeScript. Чтобы установить этот пакет, запустите в консоли диспетчера пакетов следующую команду:
Install-Package SignalR.TypeScript -Pre
Дополнительная информация и инструкции в моем блоге: http://murat.girg.in/2013/11/introducing-signalr-typescript/
[/Self-штекер]
Было ли это так:
interface signalR extends JQueryStatic {
connection;
}
var hub = (<signalR>$).connection.myHub
Это не идеально, но если вам нужно быстро переместить чистый JavaScript-сигнал signalR в Typescript, вы можете использовать такой интерфейс (вам нужно будет включить определение типа signalr.d.ts).
interface SignalR {
messageHub: any;
}
var chat = $.connection.messageHub;
chat.client.actionMessage = function (data) {
console.info("actionMessage: received: message: " + data.message);
};