reactjs - TS2322 扩展 Button 时出错,未找到组件属性。什么是正确的打字方式?
问题描述
我正在从 MUI v3 迁移到 v4。我有一些包装的 Button 组件,它们在常规 Material UI Button 组件上扩展了一些样式和其他属性。自从升级到 v4 后,我收到了类型错误。我正在使用 react-router-dom 作为我的路由库。
当传递 MUI v4 文档(此处:https ://material-ui.com/components/buttons/#third-party-routing-library )中更新的 Button 示例中所写的转发 ref 组件时,我收到一个类型错误component
我为包装按钮提供的道具类型中不存在。
我尝试了 Button 组件中的各种类型组合,以查看其他方法是否可行,但似乎ButtonProps
应该根据构建的OverrideProps
类型来涵盖它。ButtonProps
这是我在代码沙箱中的复制:
https://codesandbox.io/s/mui-button-type-issue-dihdd?from-embed
注意:在代码沙箱遍历类型时,类型错误需要一分钟才能显示出来。
解决方案
发生这种情况有两个原因:
ExtendedButton
包含aMUIButton
(具有component
属性),但ExtendedButton
不是 aMUIButton
本身(因此它没有component
属性)。- 该
component
属性是在 上定义的OverridableComponent
,而不是OverrideProps
。
您需要实现组件属性并将其传递给MUIButton
:
const Button: React.FC<Props & { component: React.ElementType }> = ({
component,
// ...
}) => (
<MUIButton
component={component}
// ...
>
// ...
</MUIButton>
)
作为参考,这里是component
MUI 中定义的位置:
export interface OverridableComponent<M extends OverridableTypeMap> {
<C extends React.ElementType>(props: { component: C } & OverrideProps<M, C>): JSX.Element;
(props: DefaultComponentProps<M>): JSX.Element;
}
推荐阅读
- sql - 为什么点或句点 ('.') 在 SQL Server 中被视为数字?
- cassandra - 使用中国数据中心 (CGF) 扩展 Cassandra 集群
- reactjs - 使用 React 的 AWS CDN 上的 CORS 问题
- css - 悬停不会改变我的 svg 的颜色
- c# - 在 .NET 中通过 XPATH 读取 Atom Feed
- git - “git --help”和“git help”有什么区别?
- python - 将 numpy.array 对象转换为 PIL 图像对象
- php - Laravel 作业 - 作业失败后从 failed() 方法访问修改后的属性值
- powershell - 从 DataGridView 隐藏行时,Powershell 给出错误
- python - 我正在尝试将文件夹中的所有 .bin 文件转换为 Python 中的 .txt 文件