为啥声明类型时可以在 redux 中未定义状态?
Posted
技术标签:
【中文标题】为啥声明类型时可以在 redux 中未定义状态?【英文标题】:Why the state can be undefined in redux when its type is declared?为什么声明类型时可以在 redux 中未定义状态? 【发布时间】:2020-04-10 01:21:11 【问题描述】:我正在使用 dva.js(基于 redux)在我的 react 应用程序中进行状态管理。我定义了一个减速器如下:
import Reducer from 'redux';
interface StateType
a: any;
b: any;
const setState: Reducer<StateType> = (state, payload ) =>
return
...state,
b: payload,
;
;
tslint 会告诉我类型 ' a: any; 中缺少属性 'a' b:任何; ' 但在“StateType”类型中是必需的。于是查看了redux的d.ts文件,找到了reducer的类型声明:
export type Reducer<S = any, A extends Action = AnyAction> = (
state: S | undefined,
action: A
) => S
显然tslint考虑reducer的第一个参数state
是可以undefined的,所以不能确定reducer的返回值类型是StateType
。为什么状态可以是未定义的?如果未定义是合理的,我应该如何更改我的代码以消除错误消息?
【问题讨论】:
【参考方案1】:目前你的reducer的state
参数没有类型,所以默认state
类型是any
。您需要指定类型以将其声明为始终定义。
const setState: Reducer<StateType> = (state: StateType, payload ) =>
...
;
【讨论】:
感谢您的回答。我试过了,tslint 告诉我输入 'StateType | undefined' 不能分配给 'StateType'。我认为Reducer<StateType>
已将state
参数的类型指定为StateType | undefined
。【参考方案2】:
感谢dancerphil的建议。他提供了如下解决方案:
import Reducer from 'redux';
interface StateType
a: any;
b: any;
const INITIAL_STATE = a: , b: ;
const setState: Reducer<StateType> = (state = INITIAL_STATE, payload ) =>
return
...state,
b: payload,
;
;
【讨论】:
以上是关于为啥声明类型时可以在 redux 中未定义状态?的主要内容,如果未能解决你的问题,请参考以下文章
在 mapStateToProps 中未定义 Redux 状态
为啥使用 redux devtools 在我的 _reduxDevtools 对象中未定义 ActionCreators 属性?