TS2322: тип «объект» нельзя назначить типу «Store» - PullRequest
0 голосов
/ 05 октября 2018

У меня есть простой компонент TypeScript, где я пытаюсь реализовать проверку типов, но я не могу понять, что не так со следующей частью кода:

import React from 'react'
import { Provider } from 'react-redux'
import { Title } from '../components'
import { Props } from './types'

const AppContainer: React.SFC<Props> = ({ store }) => {
  return (
    <Provider store={store}>
      <Title />
    </Provider>
  )
}

export default AppContainer

, потому что я всегда получаю ошибку:

TS2322: тип «объект» нельзя назначить типу «Магазин».Свойство 'dispatch' отсутствует в типе '{}'.

Интерфейс компонента:

export interface Props {
  store: object,
  dispatch(): any,
  getState(): any,
  subscribe(): any,
  replaceReducer(): any
}

PS Я допускаю, что проверка типов работает нормально, если я удаляю скобки из аргументаstore, например: const AppContainer: React.SFC<Props> = (store) => ...

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Итак:

P.S. I admit, that Type checking works fine if I remove bracers from the argument store, like: const AppContainer: React.SFC<Props> = (store) => ...

Да, это совершенно верно!Таким образом, решение в вашем случае очень простое:

const AppContainer = ({ store }: Props) => {
  return (
    <Provider store={store}>
      <Title />
    </Provider>
  )
}

Это потому, что вы объявляете аргументы своей функции, как разрушительным образом.Если вы выберете неразрушающий = (store) =>, вы также можете выбрать собственное решение для проверки типов.Между этими двумя способами нет никакой разницы.Вы можете выбрать один из них самостоятельно.

0 голосов
/ 05 октября 2018

Я думаю, что это должна быть заглавная буква O в объекте, т.е. в объекте.

export interface Props {
  store: Object,
  dispatch(): any,
  getState(): any,
  subscribe(): any,
  replaceReducer(): any
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...