如何捕获另一个类型参数的子属性的类型?
实际问题有点含糊,因此我认为提供我实际问题的背景是值得的,但是实际问题纯粹是打字稿问题。
我正在编写一个将render prop components转换为higher order components的函数。
所以,如果我有一个像这样的渲染道具组件:
function RenderPropComponent({ children, propToRenderPropComponent }) {
const propFromRenderPropComponent = /* ... */;
return children({ propFromRenderPropComponent });
}
我正在编写的函数将像这样转换RenderPropComponent
import convertToHoc from 'helpers/convertToHoc';
import RenderPropComponent from './RenderPropComponent';
const withRenderProp = convertToHoc(RenderPropComponent);
function RequiresPropFromRenderPropComponent({ propFromRenderPropComponent }) {
return <>{propFromRenderPropComponent}</>;
}
export default withRenderProp({
propToRenderPropComponent: 'a'
})(RequiresPropFromRenderPropComponent);
所以现在我要输入convertToHoc
。
这是实现:
import React from 'react';
export default function convertToHoc(RenderPropComponent) {
return hocParams => Component =>
React.forwardRef((props, ref) => (
<RenderPropComponent
{...hocParams}
children={renderProps => <Component {...renderProps} {...props} ref={ref} />}
/>
));
}
这是我的内容:
import React from 'react';
import { RemoveProps } from 'helpers/typings';
type RenderPropComponent<
Props extends {
children: (childProps: ChildProps) => any
},
ChildProps
> = React.ComponentType<Props>;
export default function convertToHoc<RenderProps, ChildProps>(
RenderPropComponent: RenderPropComponent<RenderProps, ChildProps>,
): (
params: RemoveProps<RenderProps, 'children'>,
) => <P>(Component: React.ComponentType<P>) => React.ComponentType<P & ChildProps>;
这些类型的打字工作很正常,但是总是为ChildProps
分配{}
类型,而不是正确的子道具。
您知道为什么这种类型总是将ChildProps
推论为{}
吗?