в TS, как определить детскую собственность? - PullRequest
0 голосов
/ 01 февраля 2019

Я учусь Typescript с React и 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] Свойство 'child' не существует в типе 'Object'.[2339]

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Ошибка, которую вы получаете, заключается в том, что вы определяете свой реквизит магазина как универсальный Object, у которого нет свойства с именем child.

Чтобы это работало, просто определитеинтерфейс для вашего магазина, например, так:

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

И затем используйте это как определение для реквизита в компоненте как:

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

0 голосов
/ 01 февраля 2019

Вы можете использовать интерфейсы для объявления форм магазина:

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
  }
}

Или вы можете использовать либо any, либо unknown для магазинатип.

...