Преглед на файлове

Improve accuracy/compatibility of success/error callback types (#3141)

JT преди 3 години
родител
ревизия
a771b86efb
променени са 2 файла, в които са добавени 26 реда и са изтрити 5 реда
  1. 15 3
      packages/@uppy/core/types/index.d.ts
  2. 11 2
      packages/@uppy/core/types/index.test-d.ts

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

@@ -188,17 +188,29 @@ export interface State<
   totalProgress: number
 }
 
+export interface ErrorResponse {
+  status: number
+  body: any
+}
+
+export interface SuccessResponse {
+  uploadUrl?: string
+  status?: number
+  body?: any,
+  bytesUploaded?: number
+}
+
 export type GenericEventCallback = () => void;
 export type FileAddedCallback<TMeta> = (file: UppyFile<TMeta>) => void;
 export type FilesAddedCallback<TMeta> = (files: UppyFile<TMeta>[]) => void;
 export type FileRemovedCallback<TMeta> = (file: UppyFile<TMeta>, reason: 'removed-by-user' | 'cancel-all') => void;
-export type UploadCallback = (data: {id: string, fileIDs: string[]}) => void;
+export type UploadCallback = (data: { id: string, fileIDs: string[] }) => void;
 export type ProgressCallback = (progress: number) => void;
 export type UploadProgressCallback<TMeta> = (file: UppyFile<TMeta>, progress: FileProgress) => void;
-export type UploadSuccessCallback<TMeta> = (file: UploadedUppyFile<TMeta, unknown>, body: unknown, uploadURL: string) => void
+export type UploadSuccessCallback<TMeta> = (file: UppyFile<TMeta>, response: SuccessResponse) => void
 export type UploadCompleteCallback<TMeta> = (result: UploadResult<TMeta>) => void
 export type ErrorCallback = (error: Error) => void;
-export type UploadErrorCallback<TMeta> = (file: FailedUppyFile<TMeta, unknown>, error: Error, response: unknown) => void;
+export type UploadErrorCallback<TMeta> = (file: UppyFile<TMeta>, error: Error, response?: ErrorResponse) => void;
 export type UploadRetryCallback = (fileID: string) => void;
 export type RestrictionFailedCallback<TMeta> = (file: UppyFile<TMeta>, error: Error) => void;
 

+ 11 - 2
packages/@uppy/core/types/index.test-d.ts

@@ -1,7 +1,7 @@
 import { expectError, expectType } from 'tsd'
 import DefaultStore from '@uppy/store-default'
 import Uppy, { UIPlugin } from '..'
-import type { UploadedUppyFile, FailedUppyFile, PluginOptions } from '..'
+import type { UploadedUppyFile, FailedUppyFile, PluginOptions, UppyFile, SuccessResponse } from '..'
 
 type anyObject = Record<string, unknown>
 
@@ -103,11 +103,20 @@ type anyObject = Record<string, unknown>
   })
 
   // Separate event handlers
-  const handleUpload = (file: UploadedUppyFile<Meta, unknown>) => {
+  const handleUpload = (file: UppyFile<Meta>) => {
     const meta = file.meta.myCustomMetadata
   }
 
   uppy.off<'upload-success', Meta>('upload-success', handleUpload)
+
+  interface CustomResponse extends SuccessResponse {
+    body?: { someValue: string }
+  }
+
+  const onUploadSuccess = async (file: UppyFile<Meta, any>, response: CustomResponse) => {
+    const res = response.body?.someValue
+  }
+  uppy.on<'upload-success', Meta>('upload-success', onUploadSuccess)
 }
 
 {