在TS,如何界定儿童的财产?

时间:2019-02-01 10:51:19

标签: reactjs typescript mobx

我正在与TypescriptReact一起学习MobX

我的MobX商店喜欢自爆。

store: {
  child: {
    selected: true,
    value: 123
  }
}

我的组件是

@inject('store')
@observer
class Display extends React.Component<{store: Object}, {}> {
  ...

  render(){
    console.log(this.props.store.child.selected); // true
  }
}

我可以看到此警报。

  

[ts]类型“ Object”上不存在属性“ child”。 [2339]

2 个答案:

答案 0 :(得分:2)

您可以使用接口来声明商店的形状:

interface Child {
    selected: boolean;
    value: number;
}

interface Store {
    child: Child;
}

@inject('store')
@observer
class Display extends React.Component<{ store: Store }, {}> {
  ...

  render() {
    console.log(this.props.store.child.selected); // true
  }
}

或者您可以使用anyunknown作为商店类型。

答案 1 :(得分:2)

您得到的错误是因为您将商店道具定义为通用Object,没有属性child

要使其正常工作,只需为商店定义一个接口,如下所示:

interface Store {
  store: {
    child: {
      selected: boolean;
      value: number;
    }
  }
}

然后将其用作组件中道具的定义,例如:

class Display extends React.Component<Store, {}> {