-
Notifications
You must be signed in to change notification settings - Fork 1
/
interfaces.ts
29 lines (21 loc) · 1.09 KB
/
interfaces.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import { IEventLike } from '../../observables/events/events-listener/event-like/interfaces';
/** TYPES **/
export type TNotificationName<N extends INotification<any, any>> = N extends INotification<infer TName, any> ? TName : never;
export type TNotificationValue<N extends INotification<any, any>> = N extends INotification<any, infer TValue> ? TValue : never;
/** INTERFACES **/
export interface INotificationConstructor {
// converts an Event to a Notification
fromEvent<TName extends string = string, TEvent extends IEventLike = IEventLike>(event: TEvent): INotification<TName, TEvent>;
new<TName extends string, TValue>(name: TName, value: TValue): INotification<TName, TValue>;
}
/**
* A notification is a tuple containing a name and a value.
* Its purpose its to associate a key with a value to allow filtering at the end of the pipe.
* @Example:
* const notification = new Notification<'click', Event>()
*/
export interface INotification<TName extends string, TValue> {
readonly name: TName;
readonly value: TValue;
toJSON(): Pick<INotification<TName, TValue>, 'name' | 'value'>;
}