reactjs - 让 typescript 看到装饰器的 Prop

标签 reactjs typescript react-native mobx mobx-react

我有一个像这样使用 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") 添加了 this.props.router 满足上面的 Props 接口(interface),但是 typescript 没有考虑到这一点,每当我使用它时如果我不在 props 中传递 router ,我会在某个地方出现错误,因此我需要更改为 router?: RouterInterface; 这很好,但并不理想。

有没有办法解决 typescript 说明装饰器注入(inject) Prop 的问题?

最佳答案

有办法解决它。
您可以在单独的接口(interface)中声明注入(inject)的 props,然后编写一个 getter 函数。我在这里写道:
https://gist.github.com/JulianG/18af9b9ff582764a87639d61d4587da1#a-slightly-better-solution

interface InjectedProps {
  bananaStore: BananaStore; // 👍 no question mark here
}

interface BananaProps {
  label: string;
}

class BananaComponent extends Component<BananaProps> {

  get injected(): InjectedProps {
    return this.props as BananaProps & InjectedProps;
  }

  render() {
    const bananas = this.injected.bananaStore.bananas; // 👍 no exclamation mark here
    return <p>{this.props.label}:{bananas}</p>
  }

}

关于reactjs - 让 typescript 看到装饰器的 Prop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47138906/

相关文章:

react-native - React Native Reanimated 错误 : Execution failed for task ':react-native-reanimated:compileDebugJavaWithJavac'

javascript - 登录后如何在 React Navigation 中重定向

javascript - React native 0.62.0 - Android 上的文件上传网络请求错误

reactjs - React 上下文应该始终是单例,还是有另一种方式?

javascript - React.js useRef 钩子(Hook)未返回预期对象

javascript - 从另一个类 React Native 访问它

javascript - angular 2 文本输入使有意义的强制性

angularjs - ngx-toastr GlobalConfig 超时设置

javascript - 你可以为 React 组件使用 es6 导入别名语法吗?

javascript - SignalR 从集线器客户端方法更新 knockout 模型的更好方法