react-router-dom+TypeScript使用withRouter报ts(2742)类型标注错误如何解决
报错原因
ts(2742)报错的根源是TypeScript无法自动推断withRouter高阶组件返回值的可移植类型,需要手动为导出的包裹后组件添加类型标注。
具体解决步骤
仅需要修改代码的导出部分即可,提供两种可选方案:
- 方案1:快速修复,直接添加强类型断言
将原最后一行的导出代码修改为:
export default withRouter(ClassComponent) as React.ComponentType;
- 方案2:严谨类型定义,适配带自定义props的场景
如果你的组件有需要外部传入的自定义属性,可以单独定义对外暴露的props类型,示例如下:
// 假设你有自定义props:type CustomProps = { title?: string } // 这里没有自定义props就填空对象类型 type ExternalProps = {} // 断言时指定对外暴露的props类型,使用组件时TS会自动校验传入的参数 const WrappedComponent = withRouter(ClassComponent) as React.ComponentType<ExternalProps> export default WrappedComponent
补充说明
如果修改后仍报错,可以检查项目依赖中@types/react、@types/react-router-dom的版本兼容性,版本差异过大也可能触发类型推断异常。
内容的提问来源于stack exchange,提问作者user13118494
相关产品推荐
相关产品推荐

