Reactjs TypeScript不从React.ComponentType推断道具
我有下面的函数,我想使用它来获取Reactjs TypeScript不从React.ComponentType推断道具,reactjs,typescript,generics,Reactjs,Typescript,Generics,我有下面的函数,我想使用它来获取组件类型及其道具,以便允许我将这些道具与路由组件道具一起注入 const routeComponentFactory=( 组件:React.ComponentType, 道具:TProps ) => { 返回(routeProps:RouteComponentProps)=>{ 返回; }; }; 如果我明确指定TProps,此函数将正常工作,例如: 接口MyComponentProps{a:number;b:number;} 常量MyComponent:Rea
组件类型及其道具,以便允许我将这些道具与路由组件道具一起注入
const routeComponentFactory=(
组件:React.ComponentType,
道具:TProps
) => {
返回(routeProps:RouteComponentProps)=>{
返回;
};
};
如果我明确指定TProps
,此函数将正常工作,例如:
接口MyComponentProps{a:number;b:number;}
常量MyComponent:React.FunctionComponent=()=>null;
routeComponentFactory(MyComponent,{});
我因为没有在对象中提供a
和b
而在那里得到一个错误
但是,如果我删除显式的
,错误就会消失,并且允许我使用空对象调用函数
如何使TypeScript正确推断MyComponentProps?我看不到它允许我使用空对象调用函数,但在我的情况下,它抱怨MyComponent prop无效
问题似乎在于它是从第二个参数推断类型的——我猜是因为它匹配的是最简单的类型
您可以这样定义函数,强制它推断正确的类型:
const routeComponentFactory = <TProps extends {}>(
Component: React.ComponentType<TProps>
) => (
props: TProps
) => {
return (routeProps: RouteComponentProps) => {
return <Component {...routeProps} {...props} />;
};
};
在这种情况下,它应该正确地抱怨空对象。如果启用strictFunctionTypes
,则会出现错误:
Type 'FunctionComponent<MyComponentProps>' is not assignable to type 'FunctionComponent<{}>'.
这是一个不错的选择,但在这种情况下不需要函数curry
Type 'FunctionComponent<MyComponentProps>' is not assignable to type 'FunctionComponent<{}>'.
const routeComponentFactory = <TProps extends {}>(
Component: React.ComponentType<TProps>,
props: TProps & {}
) => {
return (routeProps: any) => {
return <Component {...routeProps} {...props} />;
};
};
interface MyComponentProps { a: number; b: number; }
const MyComponent: React.FunctionComponent<MyComponentProps> = () => null;
routeComponentFactory(MyComponent, {}); // Argument of type '{}' is not assignable to parameter of type 'MyComponentProps'