我想为 react-router-relay 创建 Typescript 定义,但是 react-router-relay 的扩展性质让我很难过。react-router 暴露了一个带有一些属性的路由器组件,还包括一个渲染属性。react-router-relay 使用此渲染属性为路由器提供中间件。在此路由器还接受可以提供中继的环境属性之后。
如何告诉 typescript 在我的模块 react-router-relay 中我扩展了模块 react-router 的定义?
我尝试了以下操作,但随后我将不得不复制 react-router 的每个组件:
declare module "react-router-relay" {
import {Middleware} from "react-router/lib/applyRouterMiddleware";
import Router from "react-router/lib/Router";
import self from "react-router/lib/Route";
const RelayMiddleware:Middleware;
export default RelayMiddleware;
export interface RelayRouter extends React.ComponentClass<RelayRouterProps> { }
interface RelayRouterProps extends Router.RouterProps {
render?(...middlewares: any[]): any
environment?: any
}
namespace Route {
import RouteProps = self.RouteProps;
export interface RelayRouterProps extends RouteProps {
name?: string;
queries?: any;
render(props: any): React.Component<any, any>
}
}
}
是否也可以直接扩展 react-router 的 RouterProps 和 RouteProps ?
编辑:路由器中继的应用如下:
import useRelay from 'react-router-relay';
...
<Router
history={browserHistory}
routes={routes}
render={applyRouterMiddleware(useRelay)}
environment={Relay.Store}
/>