1

我想为 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}
/>
4

0 回答 0