Проблема редуктора машинописи - PullRequest
2 голосов
/ 07 января 2020

У меня есть следующее:

...

type RepairsState = {
  data: Property[] /* Property is an object coming from another file */
}

type RepairsPropertyLoadAction = {
  type: typeof REPAIRS_PROPERTY_LOAD
  payload: { models: Property[] } /* the payload will return an object that has a models property of an array of objects that match my property type */
}

/* Reducer */
export const initialState: RepairsState = {
  data: [
    {
      id: '',
      jobNo: '',
      trade: '', 
      priority: '',
      status: '',
      raisedDate: new Date(),
      appointmentDate: new Date(), 
      completedDate: new Date(),
      description: ''
    }
  ]
}

export default function reducer(state = initialState, action: RepairsPropertyLoadAction): RepairsState {
  switch (action.type) {
    case REPAIRS_PROPERTY_LOAD:
      console.log(action.payload)
      return {
        ...state,
        data: action.payload
      }
    default:
      return state
  }
}

export const getRepairsProperty = (state: AppState) => state.repairs.data

...

Property класс:

export default class Property {
  id: string = ''
  jobNo: string = ''
  trade: string = ''
  priority: string = ''
  status: string = ''
  raisedDate: Date = new Date()
  appointmentDate: Date = new Date()
  completedDate: Date = new Date()
  description: string = ''
}

однако я получаю следующую ошибку:

Type '{ models: Property[]; }' is missing the following properties from type 'Property[]': length, pop, push, concat, and 28 more. TS2740

enter image description here

Ответы [ 2 ]

4 голосов
/ 07 января 2020

Действие возвращает объект {models: Property []} для данных, но состояние имеет data: Свойство []

return {
   ...state,
   data: action.payload.model
}
1 голос
/ 07 января 2020

Вам не хватает свойства models, которое определено как часть RepairsPropertyLoadAction. Редуктор должен возвращать это вместо:

return {
   ...state,
   data: action.payload.models,
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...