с ошибкой проверки типа роутера в качестве декоратора реакции-роутера - PullRequest
0 голосов
/ 14 октября 2018

Когда я использую 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 в качестве декоратора.Как это сделать.

...