【发布时间】:2021-05-30 16:23:11
【问题描述】:
在下面,reducer 中指定了代码操作类型(操作为 SucceededAction)并且一切正常,但如果我删除(作为 SucceededAction)我收到错误“有效负载不存在于类型 'SucceededAction |失败的行动'。'
现在,如果我将常量替换为 --
type_SUCCEEDED:'type_SUCCEEDED',type_FAILED:'type_FAILED' 并像 type_FAILED 和 type_SUCCEEDED 一样使用它们,而不是 type.FAILED、type.SUCCEEDED,它无需类型转换即可工作。
因此,在下面的代码中,我认为 typeof 不适用于我的操作,因此我必须在减速器中进行类型转换。想知道同样的确切原因。 如果您知道原因,请提供帮助,并在这里帮助我找出下面代码中的错误。
谢谢。
//constants
export const type = {
SUCCEEDED: 'type_SUCCEEDED',
FAILED: 'type_FAILED'
};
export interface SucceededAction {
readonly type: typeof type.SUCCEEDED;
readonly payload: string;
}
export interface FailedAction {
readonly type: typeof type.FAILED;
}
//actions
export const Succeeded = (payload: string): SucceededAction => ({
type: type.SUCCEEDED,
payload,
});
export const Failed = (): FailedAction => ({
type: type.FAILED,
});
//reducer
export const myReducer = (
state: string = '',
action:
| SucceededAction
| FailedAction,
): string => {
switch (action.type) {
case type.SUCCEEDED:
return (action as SucceededAction) //type specified
.payload;
case type.FAILED:
return state;
default:
return state;
}
};
【问题讨论】:
标签: reactjs typescript redux react-redux