我需要创建很多类似的类,但它们需要是不同的类。我可以创建一个类,然后从那个继承所有其他类,但我想更多地删除样板,所以我的想法是创建一个创建这个类的函数(不是它的实例,而是字面上的一个类)并返回它
到目前为止我所拥有的:
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");
我有什么遗失的吗?或者我的做法完全错了?
答案 0 :(得分:0)
问题在于类型:
let foo: --> LoginErrorAction <-- = new LoginErrorAction("foo");
您正在创建一个类,您可以使用new
- 运算符(可以在JavaScript中的任何function
上使用) - 但您的类是在限定为Typescript类型的意义上,不是类。
从技术上讲:您不能将const/let
用作type
。
如果你想继续动态创建类,我想你仍然必须至少为每个类命名一个接口。 - 或者您没有设置显式类型,但让TypeScript的类型推理系统处理它 - 您应该能够在匿名类的任何属性上获得代码完成,而无需设置显式类型。