Skip to content

Commit 248febb

Browse files
committed
feat(ts): infer types for LiveQuery event listener params
1 parent c9a2df8 commit 248febb

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

storage.d.ts

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ interface AsyncIterator<T> {
88
next(): Promise<IteratorResult<T>>;
99
}
1010

11-
declare class EventEmitter {
12-
on(evt: string, listener: Function): EventEmitter;
13-
once(evt: string, listener: Function): EventEmitter;
14-
off(evt: string, listener: Function): EventEmitter;
15-
emit(evt: string, ...args: any[]): Boolean;
11+
declare class EventEmitter<T> {
12+
on<K extends keyof T>(event: K, listener: T[K]): this;
13+
on(evt: string, listener: Function): this;
14+
once<K extends keyof T>(event: K, listener: T[K]): this;
15+
once(evt: string, listener: Function): this;
16+
off<K extends keyof T>(event: T | string, listener?: Function): this;
17+
emit<K extends keyof T>(event: T | string, ...args: any[]): boolean;
1618
}
1719

1820
export var applicationId: string;
@@ -158,16 +160,16 @@ export class File extends BaseObject {
158160
static createWithoutData(objectId: string): File;
159161

160162
destroy(): Promise<void>;
161-
fetch(fetchOptions?: FetchOptions, options?: AuthOptions): Promise<File>;
163+
fetch(fetchOptions?: FetchOptions, options?: AuthOptions): Promise<this>;
162164
metaData(): any;
163165
metaData(metaKey: string): any;
164166
metaData(metaKey: string, metaValue: any): any;
165167
name(): string;
166168
ownerId(): string;
167169
url(): string;
168-
save(options?: FileSaveOptions): Promise<File>;
170+
save(options?: FileSaveOptions): Promise<this>;
169171
setACL(acl?: ACL): any;
170-
setUploadHeader(key: string, value: string): File;
172+
setUploadHeader(key: string, value: string): this;
171173
size(): any;
172174
thumbnailURL(width: number, height: number): string;
173175
toFullJSON(): any;
@@ -532,13 +534,21 @@ export class Query<T extends Queriable> extends BaseQuery<T> {
532534
options?: { orderedBy?: string; batchSize?: number },
533535
authOptions?: AuthOptions
534536
): AsyncIterator<T>;
535-
subscribe(options?: { subscriptionId?: string }): Promise<LiveQuery>;
537+
subscribe(options?: { subscriptionId?: string }): Promise<LiveQuery<T>>;
536538
}
537539

538-
declare class LiveQuery extends EventEmitter {
540+
declare class LiveQuery<T> extends EventEmitter<LiveQueryEvent<T>> {
539541
unsubscribe(): Promise<void>;
540542
}
541543

544+
declare interface LiveQueryEvent<T> {
545+
create: (target?: T) => any;
546+
update: (target?: T, updatedKeys?: string[]) => any;
547+
enter: (target?: T, updatedKeys?: string[]) => any;
548+
leave: (target?: T, updatedKeys?: string[]) => any;
549+
delete: (target?: T) => any;
550+
}
551+
542552
declare class FriendShipQuery extends Query<User> {}
543553

544554
export class SearchQuery<T extends Queriable> extends BaseQuery<T> {

0 commit comments

Comments
 (0)