Typescript 减速器自定义分派类型,不可分配,属性类型‘;派遣’;不相容
我现在有一个简单的减速器和动作类型。在设置测试时,我遇到了一个type def问题,返回了我的Typescript 减速器自定义分派类型,不可分配,属性类型‘;派遣’;不相容,typescript,redux,redux-actions,Typescript,Redux,Redux Actions,我现在有一个简单的减速器和动作类型。在设置测试时,我遇到了一个type def问题,返回了我的store,引用了我的“自定义”操作类型声明。我看到一个错误: 类型“Store”不可分配给类型“Store” 为什么调用combineReducers()时会返回SetSelectedAccount?globalReducer正在处理SetSelectedAccount的操作 在出现上述错误的我的测试设置文件中: export function createTestStore(isInternal:
store
,引用了我的“自定义”操作类型声明。我看到一个错误:
类型“Store”不可分配给类型“Store”
为什么调用combineReducers()
时会返回SetSelectedAccount
?globalReducer
正在处理SetSelectedAccount
的操作
在出现上述错误的我的测试设置文件中:
export function createTestStore(isInternal: boolean): Store {
const store: Store<CombinedState<{
global: GlobalStateShape;
}>, SetSelectedAccount> = createStore(rootReducer, { global:
getGlobalInitialState(isInternal) });
return store;
}
动作。ts
export const rootReducer: Reducer<CombinedState<{
global: GlobalStateShape;
}>, SetSelectedAccount> = combineReducers({
global: globalReducer,
});
const composedEnhancer = composeWithDevTools(
applyMiddleware()
);
export const store: Store<CombinedState<{
global: GlobalStateShape;
}>, SetSelectedAccount> = createStore(rootReducer, composedEnhancer);
const SET_SELECTED_ACCOUNT = 'SET_SELECTED_ACCOUNT';
export const GlobalActions = {
SET_SELECTED_ACCOUNT,
};
export interface SetSelectedAccount {
type: typeof SET_SELECTED_ACCOUNT;
payload: { accountId: string; selectedApp: AppsList };
}
export type GlobalActionTypes = SetSelectedAccount;
FWIW,如果我添加第二个操作,那么
SetSelectedAccount
将变成上面的返回类型GlobalActionTypes
,这是关于不匹配的相同结果和错误消息dispatch
谢谢大家! 问题
问题在于createTestStore
函数的返回类型。您创建了一个特定类型的存储(store
),然后将其作为不带泛型的store
返回。Store
的默认类型是您在错误消息中看到的Store
您可能会认为这不会是一个问题,因为您的存储更具体,所以它应该可以分配给存储
,对吗?但是,当您处理函数参数(如Dispatch
的参数)时,特殊性会倒退。返回类型表示您返回的存储能够分派任何操作
,但实际上您只能分派类型SetSelectedAccount
,因此您的存储不能分配给更广泛的类型
解决
最简单的方法就是完全删除返回类型:State
。您已经输入了要返回的store
变量,因此您并不真正需要它
您还可以将类型注释从变量store
移动到函数return。仅供参考,reduxCombinedState
实用程序类型实际上不起任何作用,CombinedState
与{global:GlobalStateShape;}
export function createTestStore(isInternal: boolean): Store<{ global: GlobalStateShape; }, SetSelectedAccount> {
return createStore(rootReducer, {
global: getGlobalInitialState(isInternal)
});
}
导出函数createTestStore(isInternal:boolean):存储{
返回createStore(rootReducer{
全局:getGlobalInitialState(isInternal)
});
}
谢谢。我包括了显示的返回类型,例如
Store
,只是为了帮助显示TSLinter对该类型的看法。我需要声明一个带有linting设置的返回类型,结果是Store
按照您的建议工作。@Linda Paiste,还有一个问题要问你:如果我添加第二个商店
要返回,会发生什么?分派返回类型是否看起来像一个联合体<代码>存储?
export function createTestStore(isInternal: boolean): Store<{ global: GlobalStateShape; }, SetSelectedAccount> {
return createStore(rootReducer, {
global: getGlobalInitialState(isInternal)
});
}