# TypeScript definitions for Server-Sent Events

I could not find any definitions of the EventSource object that belongs to Server-Sent Events, so I create the definitions. That's how they look like:

declare var EventSource : sse.IEventSourceStatic;

declare module sse {

enum ReadyState {CONNECTING = 0, OPEN = 1, CLOSED = 2}

interface IEventSourceStatic extends EventTarget {
new (url: string, eventSourceInitDict?: IEventSourceInit);
url: string;
withCredentials: boolean;
CONNECTING: ReadyState; // constant, always 0
OPEN: ReadyState; // constant, always 1
CLOSED: ReadyState; // constant, always 2
onopen: Function;
onmessage: (event: IOnMessageEvent) => void;
onerror: Function;
close: () => void;
}

interface IEventSourceInit {
withCredentials?: boolean;
}

interface IOnMessageEvent {
data: string;
}
}


Also available on GitHub.

I am new to TypeScript so I wonder if this definition is OK with common best practices and whether it could be improved.

• Does this definition mean that you're attaching to the events like eventSource.on('onmessage', ...) ? (note: I'm also a beginner in TS) – MayaLekova Sep 19 '16 at 11:44
• Just want to say I'm using your definition in a project and it's working fine and helping my concentrate on more productive things. Thanks :-) – Forbesmyester Nov 14 '16 at 10:31

According to your definition file, I'm assuming there's a global class called EventSource
• Avoid Function (or Object or Array), describe the signature accurately (like you did with onmessage). If you don't know the return type or the argument, apply any liberally. At least you're explicit about not knowing.
• TypeScript has literal string, number and enum types, so you could do something like CONNECTING: ReadyState.CONNECTING