覆盖路由器匹配以提供params定义

时间:2017-11-29 16:22:31

标签: javascript reactjs typechecking

我的组件中有一个函数可以访问路由器参数。

import { withRouter } from 'react-router-dom';
import type { Match } from 'react-router-dom';

@withRouter
export default class UserDetails extends Component {
  getUserContributions() {
    const { match: { params: { userId } } } = this.props;
    this.props.getUserContributions(userId);
  }
  // ... other non-relevant stuff.
}

但是,流程会抱怨userId可能未定义。这是可预测的,因为这是react-router-domflow-typed定义params的方式。它不知道有一个名为userId的特定必需键是string类型。

declare export type Match = {
  params: { [key: string]: ?string },
  isExact: boolean,
  path: string,
  url: string
};

我想提供路线参数的定义作为一种类型。这是我的第一次尝试:

type RouteParams = {
  userId: string,
}

type RouteMatch = Match & {
  params: RouteParams,
}

但是,flow会为此抛出错误。

  

属性params。无法在交叉点类型的任何成员上访问属性

看来这是因为它已在Match上定义。

有没有办法在特定的定义空间覆盖一个键?

0 个答案:

没有答案