Когда я использую withRouter
в качестве декоратора для компонента, например
@withRouter
@observer
// observer is mobx decorator
export default class UserInfo extends React.Component<any> {
render() {
return (
<div>1</div>
)
}
}
Происходит ошибка проверки типа:
(10,1): Unable to resolve signature of class decorator when called as an expression.
Type 'ComponentClass<Pick<any, string | number | symbol>, any>' is not assignable to type 'typeof UserInfo'. Type 'Component<Pick<any, string | number | symbol>, any, any>' is not assignable to type 'UserInfo'. Types of property 'render' are incompatible. Type '() => ReactNode' is not assignable to type '() => Element'.
Type 'ReactNode' is not assignable to type 'Element'.
Type 'undefined' is not assignable to type 'Element'.
Почему тип <div>1</div>
равен Element
не ReactNode
?И я нашел определение функции рендеринга render(): ReactNode
, почему машинопись считает ее Element
?
И как исправить эту ошибку?
Я пытался добавить тип возврата render()
.
@withRouter
@observer
export default class UserInfo extends React.Component<any> {
render(): React.ReactNode {
return (
<div>1</div>
)
}
}
// or
@observer
class UserInfo extends React.Component<any> {
render(): React.ReactNode {
return (
<div>1</div>
)
}
}
export default withRouter(UserInfo)
Работает, но не элегантно.Я хочу использовать withRouter
в качестве декоратора.Как это сделать.