将 forwardRef 与泛型一起使用时,我得到 Property 'children' does not exist on type 'IntrinsicAttributes'
或 Property 'ref' does not exist on type 'IntrinsicAttributes'
。
https://codesandbox.io/s/react-typescript-0dt6d?fontsize=14
上面 CodeSandbox 链接中的相关代码在此处复制:
interface SimpleProps<T extends string>
extends React.HTMLProps<HTMLButtonElement> {
random: T;
}
interface Props {
ref?: React.RefObject<HTMLButtonElement>;
children: React.ReactNode;
}
function WithGenericsButton<T extends string>() {
return React.forwardRef<HTMLButtonElement, Props & SimpleProps<T>>(
({ children, ...otherProps }, ref) => (
<button ref={ref} className="FancyButton" {...otherProps}>
{children}
</button>
)
);
}
() => (
<WithGenericsButton<string> ref={ref} color="green">
Click me! // Errors: Property 'children' does not exist on type 'IntrinsicAttributes'
</WithGenericsButton>
)
这里建议了一个潜在的解决方案,但不确定如何在这种情况下实施: https ://github.com/microsoft/TypeScript/pull/30215(来自 https://stackoverflow.com/a/51898192/9973558 )
原文由 Stephen Koo 发布,翻译遵循 CC BY-SA 4.0 许可协议
所以这里的主要问题是您在渲染中返回
React.forwardRef
的结果,这不是渲染函数的有效返回类型。您需要将 forwardRef 结果定义为它自己的组件,然后在您的 WithGenericsButton 高阶组件中呈现它,如下所示:如果你把它放在沙盒或操场上,你会看到
props
现在输入正确,包括一个random
T