Oct*_*aLo 2 typescript reactjs typescript-generics react-dropzone react-typescript
我正在使用react-dropzone 创建一个组件。React-dropzone 提供了一个useDropzone()以对象作为参数的 a ,例如useDropzone({ onDrop })。
useDropzone 的类型是:
export function useDropzone(options?: DropzoneOptions): DropzoneState;
Run Code Online (Sandbox Code Playgroud)
Dropzone选项有
export type DropzoneOptions = Pick<React.HTMLProps<HTMLElement>, PropTypes> & {
onDrop?: <T extends File>(acceptedFiles: T[], fileRejections: FileRejection[], event: DropEvent) => void;
};
Run Code Online (Sandbox Code Playgroud)
如何通过在 useCallback 中acceptedFiles键入泛型来键入(而不是任何) ?T
const onDrop = useCallback((acceptedFiles: any) => {
acceptedFiles.forEach((file) => {
console.log(file)
})
}, [])
Run Code Online (Sandbox Code Playgroud)
您可以在函数中添加类型useCallback
const onDrop = useCallback(<T extends File>(acceptedFiles: T[]) => {
acceptedFiles.forEach((file) => {
console.log(file)
})
}, [])
Run Code Online (Sandbox Code Playgroud)
您还可以选择直接使用 useCallback 上的类型
type OnDropType = NonNullable<DropzoneOptions['onDrop']>;
const onDrop = useCallback<OnDropType>((acceptedFiles) => {
acceptedFiles.forEach((file) => {
console.log(file)
})
}, [])
Run Code Online (Sandbox Code Playgroud)
NonNullable是需要的,因为useCallback不喜欢 undefined 作为函数类型。
| 归档时间: |
|
| 查看次数: |
3755 次 |
| 最近记录: |