我正在为反应项目构建一个类型化的Redux商店。接口似乎工作正常,但当我尝试在导出本身内传递它们时。我收到以下错误"' ItemIsLoading' on指的是一个类型,但在这里被用作一个值"
操作:
import * as constants from '../constants/constantsIndex';
export interface ItemHasErrored {
type: constants.ITEMS_HAS_ERRORED;
}
export interface ItemIsLoading {
type: constants.ITEMS_IS_LOADING;
}
export interface ItemFetchDataSuccess {
type: constants.ITEMS_FETCH_DATA_SUCCESS;
}
export function itemsFetchData(url: any) {
return (dispatch) => {
dispatch(ItemIsLoading(true));
fetch(url)
.then((response) => {
if (!response.ok) {
throw Error(response.statusText);
}
dispatch(ItemIsLoading(false));
return response;
})
.then((response) => response.json())
.then((items) => dispatch(ItemFetchDataSuccess(items)))
.catch(() => dispatch(ItemHasErrored(true)));
};
}
常量:
export const ITEMS_HAS_ERRORED = 'ITEMS_HAS_ERRORED';
export type ITEMS_HAS_ERRORED = typeof ITEMS_HAS_ERRORED;
export const ITEMS_IS_LOADING = 'ITEMS_IS_LOADING';
export type ITEMS_IS_LOADING = typeof ITEMS_IS_LOADING;
export const ITEMS_FETCH_DATA_SUCCESS = 'ITEMS_FETCH_DATA_SUCCESS';
export type ITEMS_FETCH_DATA_SUCCESS = typeof ITEMS_FETCH_DATA_SUCCESS;
目前我只是在尝试构建typescript / redux商店,但似乎无法找到有关此问题性质的任何信息。怎么会有人解决这个错误?
答案 0 :(得分:2)
接口无法实例化,但可以进行扩展。因此,如果您希望使用与接口的类型签名匹配的实例,则应该扩展它。
您可以使用类
实现接口class ItemIsLoadingAction implements ItemIsLoading {
payload: boolean;
constructor(payload) {
this.payload = payload;
}
}
然后,您可以使用它的实例来发送像
这样的动作 dispatch(new ItemIsLoadingAction(false))
这适用于其余的接口。