【发布时间】:2019-12-29 20:57:57
【问题描述】:
我有以下功能(它是一个 React 钩子):
type HandleEditFn = (name: string) => (data: any) => React.MouseEventHandler;
type useFormToggleHook = (params: {
forms: {
[propName: string]: React.ReactType;
};
formPropsFn?: (data: any) => object;
refetch?: any;
}) => [...];
export const useFormToggle: useFormToggleHook = ({
...
}) {
const handleEdit : HandleEditFn = name => data => e => {
...
}
return [handleEdit];
}
现在,我想让这个函数通用;因此,调用此钩子的组件可以执行以下操作:
const [handleEdit] = useFormToggle<UserData>(...);
所以,我在类型中添加了通用语法:
type HandleEditFn<T> = (name: string) => (data: T) => React.MouseEventHandler;
type useFormToggleHook<T> = (params: {
forms: {
[propName: string]: React.ReactType;
};
formPropsFn?: (data: T) => object;
refetch?: any;
}) => [HandleEditFn<T>, ...];
// Type here doesn't work
export const useFormToggle: useFormToggleHook<T> = ({
...
}) {
// Type is required here!
const handleEdit : HandleEditFn<T> = name => data => e => {
...
}
return [handleEdit, ...];
}
当我为useFormToggle 函数添加useFormToggleHook<T> 时,我收到T 不是有效类型的错误。
我已阅读以下 Stackoverflow 帖子:TypeScript Type of generic function 但这并没有回答我的问题。我知道我可以做到以下几点:
export const useFormToggle : <T>(params: {
forms: {
[propName: string]: React.ReactType;
},
formPropsFn?: (data: any) => object;
refetch?: any;
}) = ({ ... }) => ...
但是,我想单独声明函数的类型。打字稿可以做到这一点吗?
【问题讨论】:
标签: reactjs typescript generics