Prechádzať zdrojové kódy

add event type (#1923)

* add event type

* event type literal union of string

* modify ts test for custom events and emit

* core: add comment about literalunion hack
Alexis Hope 5 rokov pred
rodič
commit
9abb4e2ba7

+ 19 - 0
packages/@uppy/core/types/core-tests.ts

@@ -50,3 +50,22 @@ import DefaultStore = require('@uppy/store-default')
     meta: { path: 'path/to/file' }
   })
 }
+
+{
+  const uppy = Uppy()
+  // can emit events with internal event types
+  uppy.emit('upload')
+  uppy.emit('complete', () => {})
+  uppy.emit('error', () => {})
+
+  // can emit events with custom event types
+  uppy.emit('dashboard:modal-closed', () => {})
+
+  // can register listners for internal events
+  uppy.on('upload', () => {})
+  uppy.on('complete', () => {})
+  uppy.on('error', () => {})
+
+  // can register listners on custom events
+  uppy.on('dashboard:modal-closed', () => {})
+}

+ 10 - 3
packages/@uppy/core/types/index.d.ts

@@ -99,16 +99,23 @@ declare module Uppy {
     totalProgress: number;
   }
   type LogLevel = 'info' | 'warning' | 'error';
+
+  // This hack accepts _any_ string for `Event`, but also tricks VSCode and friends into providing autocompletions
+  // for the names listed. https://github.com/microsoft/TypeScript/issues/29729#issuecomment-505826972
+  type LiteralUnion<T extends U, U = string> = T | (U & { });
+  type Event = LiteralUnion<'file-added' | 'file-removed' | 'upload' | 'upload-progress' | 'upload-success' | 'complete' | 'error' | 'upload-error' |
+               'upload-retry' | 'info-visible' | 'info-hidden' | 'cancel-all' | 'restriction-failed' | 'reset-progress'>;
+
   class Uppy {
     constructor(opts?: Partial<UppyOptions>);
     on<TMeta extends IndexedObject<any> = {}>(event: 'upload-success', callback: (file: UppyFile<TMeta>, body: any, uploadURL: string) => void): Uppy;
     on<TMeta extends IndexedObject<any> = {}>(event: 'complete', callback: (result: UploadResult<TMeta>) => void): Uppy;
-    on(event: string, callback: (...args: any[]) => void): Uppy;
-    off(event: string, callback: any): Uppy;
+    on(event: Event, callback: (...args: any[]) => void): Uppy;
+    off(event: Event, callback: any): Uppy;
     /**
      * For use by plugins only!
      */
-    emit(event: string, ...args: any[]): void;
+    emit(event: Event, ...args: any[]): void;
     updateAll(state: object): void;
     setState(patch: object): void;
     getState<TMeta extends IndexedObject<any> = {}>(): State<TMeta>;