Reactjs 将类型正确地传递到Redux reducer

Reactjs 将类型正确地传递到Redux reducer,reactjs,typescript,redux,reducers,Reactjs,Typescript,Redux,Reducers,在使用Typescript的Redux中,我尝试在reducer函数中向action属性传递适当的类型时遇到了一些困难。在常规es6语法中,我将传入如下类型: action: {} 但在Typescript中,它是为一种更具体的动作类型而动作,所以我尝试了以下方法: import { UPDATE_STATE, } from '../constants/ActionTypes'; import * as Actions from '../actions/index.js'; const

在使用Typescript的Redux中,我尝试在reducer函数中向action属性传递适当的类型时遇到了一些困难。在常规es6语法中,我将传入如下类型:

action: {}
但在Typescript中,它是为一种更具体的动作类型而动作,所以我尝试了以下方法:

import {
  UPDATE_STATE,
} from '../constants/ActionTypes';

import * as Actions from '../actions/index.js';

const initialState = {
  someState: '',
}

// TODO: Type checking here is throwing an error

export default function counter(state = initialState, action : Actions ) {
  switch(action.type) {
    case UPDATE_STATE:
      return {
        ...state,
      }
    }
}
当我尝试在Webpack中编译时,Typescript当前引发此错误:

[at loader]中出错。/src/reducers/numberpad.tsx:27:64 TS2304:找不到名称“操作”

行动:

index.js
import * as types from '../constants/ActionTypes'

export function update(val) {
  return { type: types.UPDATE, val }
}
常数:

export const UPDATE = 'UPDATE'
到目前为止,我还不清楚,我还尝试将一个类型作为“对象”传递(因为从我的操作返回的是一个实际的对象),但是,这似乎也没有得到识别。我还尝试指定一种类型的“any”,使其更灵活,但TS似乎也不喜欢这样


对于TS在这些情况下检查的内容,我有点困惑。任何想法都欢迎。谢谢。

您的操作应该是界面或类型

您的导入是从index.js文件导入所有内容,并将其命名为“操作”

在index.js文件中,您需要声明一个类型或接口,例如

export interface IAction {
    type: string;
    data: any;
}
然后在减速器中,您需要:

import {IAction} from '../actions/index.js';
…然后你的减速机:

export default function counter(state = initialState, action : IAction) {
  switch(action.type) {
    case UPDATE_STATE:
      return {
        ...state,
      }
    }
}

您的操作应该是接口或类型

您的导入是从index.js文件导入所有内容,并将其命名为“操作”

在index.js文件中,您需要声明一个类型或接口,例如

export interface IAction {
    type: string;
    data: any;
}
然后在减速器中,您需要:

import {IAction} from '../actions/index.js';
…然后你的减速机:

export default function counter(state = initialState, action : IAction) {
  switch(action.type) {
    case UPDATE_STATE:
      return {
        ...state,
      }
    }
}

请显示您的操作/索引文件,您的操作将导出到哪里?我猜问题是刚刚添加了它们。请显示您的操作/索引文件,您将操作导出到哪里?我猜问题是他们刚刚加入了