我有一个做new this()
的抽象类,但是,它不是在创建自身的实例,而是在创建扩展它的类的实例。
这在编译时在JavaScript中有效,并返回适当的类。但是,TypeScript在抱怨。
无法创建抽象类的实例。
abstract class Model {
static find<T extends Model>(someVar) {
let inst = new this() as T
// Do some extra stuff with the instance
return inst
}
}
class A extends Model { }
A.find()
答案 0 :(得分:0)
解决方案的第一个问题-不安全,T
类型可能不包含空构造函数。第二个问题:即使您未在find()
类上调用A
,如果未明确设置返回类型,则返回类型将被推断为Model
。
由于无论如何在调用find
时都应指定A类型,因此最好将类型构造函数传递给find方法,在这种情况下,两个问题都将得到解决。
abstract class Model {
static find<T extends Model>(ModelClass: new () => T, param: string): T {
let inst = new ModelClass()
// Do some extra stuff with the instance
return inst;
}
}
class A extends Model {}
const a = Model.find(A, "param");