' ItemIsLoading' on表示类型,但在此处用作值

时间:2017-12-13 19:21:59

标签: javascript reactjs typescript redux

我正在为反应项目构建一个类型化的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商店,但似乎无法找到有关此问题性质的任何信息。怎么会有人解决这个错误?

1 个答案:

答案 0 :(得分:2)

打字稿中的

接口无法实例化,但可以进行扩展。因此,如果您希望使用与接口的类型签名匹配的实例,则应该扩展它。

您可以使用类

实现接口
class ItemIsLoadingAction implements ItemIsLoading {
  payload: boolean;
  constructor(payload) {
    this.payload = payload;
  }
}

然后,您可以使用它的实例来发送像

这样的动作

dispatch(new ItemIsLoadingAction(false))

这适用于其余的接口。