如何使用函数创建一个类并将其导出

时间:2017-02-26 09:16:32

标签: typescript ngrx

我需要创建很多类似的类,但它们需要是不同的类。我可以创建一个类,然后从那个继承所有其他类,但我想更多地删除样板,所以我的想法是创建一个创建这个类的函数(不是它的实例,而是字面上的一个类)并返回它

到目前为止我所拥有的:

export function createErrorAction(type) {
  return class {
    type = type;
    payload: { error: string};
    constructor(error: string) {
      this.payload = { error : error };
    }
  }
}

然后我生成并导出不同的类:

export const LoginErrorAction = createErrorAction(ActionTypes.LOGIN_ERROR);
export const FetchErrorAction = createErrorAction(ActionTypes.FETCH_ERROR);

当我想使用这个类时,它的工作原理如下:

let foo = new LoginErrorAction("foo");

但是当我尝试添加类型时,我收到错误(命名空间' ... path_to_file ...'没有导出的成员LoginErrorAction ):

let foo: LoginErrorAction = new LoginErrorAction("foo");

我有什么遗失的吗?或者我的做法完全错了?

1 个答案:

答案 0 :(得分:0)

问题在于类型:

let foo: --> LoginErrorAction <-- = new LoginErrorAction("foo");

您正在创建一个类,您可以使用new - 运算符(可以在JavaScript中的任何function上使用) - 但您的是在限定为Typescript类型的意义上,不是

从技术上讲:您不能将const/let用作type

如果你想继续动态创建类,我想你仍然必须至少为每个类命名一个接口。 - 或者您没有设置显式类型,但让TypeScript的类型推理系统处理它 - 您应该能够在匿名类的任何属性上获得代码完成,而无需设置显式类型。