Hello, fellow programmers.
If you, like me, love both SignalR and TypeScript, you might find this interesting and/or useful.
SignalR.TypeScript helps you generate TypeScript type definitions for your SignalR hubs. It also generates type definitions for the items you pass between client and server.
Some benefits of using TypeScript include:
If you prefer to use TypeScript instead of raw JavaScript on your client code, this tool can be really handy and would save you from hand-rolling your .d.ts files or using “any” everywhere. Please note that this is still in “alpha” so there might be rough edges.
Install-Package SignalR.TypeScript -Pre
. Three files will be added to your project’s root folder: types.tt, types.d.ts and signalr.d.ts. This package also contains command line tool srts.exe.This file was generated for the JabbR project.
/* Sample code -- create a .ts file, and paste the following to get started
/// <reference path="types.d.ts" />
/// <reference path="signalr.d.ts" />
// Proxies
var monitor: IMonitorProxy = (<any>$.connection).monitor;
var chat: IChatProxy = (<any>$.connection).chat;
// Client implementations go here... add some functions.
monitor.client = {
};
chat.client = {
};
$.connection.hub.start().done((a) => {
// alert('connected.');
// (do something)
});
*/
// Client interfaces. These are the return types for the proxies.
// Implement these in your .ts file, but do not manually edit them here.
interface IMonitorClient { }
interface IChatClient { }
// Data interfaces
interface ClientMessage {
Id: string;
Content: string;
Room: string;
}
interface UserViewModel {
Name: string;
Hash: string;
Active: boolean;
Status: string;
Note: string;
AfkNote: string;
IsAfk: boolean;
Flag: string;
Country: string;
LastActivity: string;
IsAdmin: boolean;
}
interface LobbyRoomViewModel {
Name: string;
Count: number;
Private: boolean;
Closed: boolean;
Topic: string;
}
interface MessageViewModel {
HtmlEncoded: boolean;
Id: string;
Content: string;
HtmlContent: string;
When: string;
User: UserViewModel;
MessageType: number;
UserRoomPresence: string;
ImageUrl: string;
Source: string;
}
interface RoomViewModel {
Name: string;
Count: number;
Private: boolean;
Topic: string;
Closed: boolean;
Welcome: string;
Users: Array<UserViewModel>;
Owners: Array<string>;
RecentMessages: Array<MessageViewModel>;
}
interface ClientNotification {
Room: string;
ImageUrl: string;
Source: string;
Content: string;
}
// Hub interfaces
interface IMonitor {
}
interface IChat {
onConnected(): IPromise<void>;
join(): IPromise<void>;
join(reconnecting: boolean): IPromise<void>;
send(content: string, roomName: string): IPromise<boolean>;
send(clientMessage: ClientMessage): IPromise<boolean>;
getUserInfo(): IPromise<UserViewModel>;
onReconnected(): IPromise<void>;
onDisconnected(): IPromise<void>;
getCommands(): IPromise<any>;
getShortcuts(): IPromise<any>;
getRooms(): IPromise<Array<LobbyRoomViewModel>>;
getPreviousMessages(messageId: string): IPromise<Array<MessageViewModel>>;
loadRooms(roomNames: Array<any>): IPromise<void>;
getRoomInfo(roomName: string): IPromise<RoomViewModel>;
postNotification(notification: ClientNotification): IPromise<void>;
postNotification(notification: ClientNotification, executeContentProviders: boolean): IPromise<void>;
typing(roomName: string): IPromise<void>;
updateActivity(): IPromise<void>;
tabOrderChanged(tabOrdering: Array<any>): IPromise<void>;
}
// Generetated proxies
interface IMonitorProxy {
server: IMonitor;
client: IMonitorClient;
}
interface IChatProxy {
server: IChat;
client: IChatClient;
}