【发布时间】:2018-04-18 17:33:48
【问题描述】:
我有一个像这样使用 mobx 和装饰器的简单组件
import * as React from "react";
import { observer, inject } from "mobx-react/native";
import { Router as ReactRouter, Switch, Route } from "react-router-native";
import Dashboard from "./_dashboard";
import { RouterInterface } from "../store/_router";
// -- types ----------------------------------------------------------------- //
export interface Props {
router: RouterInterface;
}
@inject("router")
@observer
class Router extends React.Component<Props, {}> {
// -- render -------------------------------------------------------------- //
render() {
const { router } = this.props;
return (
<ReactRouter history={router.history}>
<Switch location={router.location}>
<Route path="/" component={Dashboard} />
</Switch>
</ReactRouter>
);
}
}
export default Router;
基本上@inject("router") 添加了满足上面 Props 接口的this.props.router,但是 typescript 没有考虑到这一点,每当我在某处使用这个组件时,如果我没有在 props 中传递router,就会出错,因此我需要更改为router?: RouterInterface;,这很好,但并不理想。
有没有办法解决这个问题,打字稿说明装饰器注入道具?
【问题讨论】:
-
IMO,没有更好的方法:您使用 TypeScript 的适当设计,为注入的
props定义接口。由于装饰器@inject在类定义之后应用(关于 TypeScript 编译),因此类必须提前了解装饰器的效果,至少在类型方面。 -
github.com/mobxjs/mobx-react/issues/256 是关于这类问题的讨论。总结一下:不,目前没有更好的方法。你需要添加吗?到酒店。
标签: reactjs typescript react-native mobx mobx-react