如何在 Typescript 中创建抽象工厂模式?
How do I create an abstract factory pattern in Typescript?
我正在尝试在 Typescript 中实现标准抽象工厂模式,但编译器不合作。这是我的代码的简化版本:
abstract class Model { }
class User extends Model { }
abstract class ModelFactory<T extends typeof Model> {
constructor(private modelConstructor: T) {}
public create(): T {
return new (this.modelConstructor)(); // ERROR HERE
}
}
class UserFactory extends ModelFactory<typeof User> {
constructor() {
super(User);
}
}
let user: User;
user = new UserFactory().create();
但是,当我使用 tsc 2.1 编译时,在上面指示的行中出现以下错误:
model.ts(8,13): error TS2511: Cannot create an instance of the abstract class 'Model'.
如果我删除类型安全并将行转换为:
return new (this.modelConstructor as any)();
代码编译无误。然而,这是不幸的。有没有什么办法可以在不使用强制转换的情况下使这段代码可编译?如果没有,为什么不呢?
您应该改用此模式:
abstract class ModelFactory<T extends Model> {
constructor(private modelConstructor: new () => T) { }
public create(): T {
return new (this.modelConstructor)(); // OK!
}
}
class UserFactory extends ModelFactory<User> {
constructor() {
super(User);
}
}
我正在尝试在 Typescript 中实现标准抽象工厂模式,但编译器不合作。这是我的代码的简化版本:
abstract class Model { }
class User extends Model { }
abstract class ModelFactory<T extends typeof Model> {
constructor(private modelConstructor: T) {}
public create(): T {
return new (this.modelConstructor)(); // ERROR HERE
}
}
class UserFactory extends ModelFactory<typeof User> {
constructor() {
super(User);
}
}
let user: User;
user = new UserFactory().create();
但是,当我使用 tsc 2.1 编译时,在上面指示的行中出现以下错误:
model.ts(8,13): error TS2511: Cannot create an instance of the abstract class 'Model'.
如果我删除类型安全并将行转换为:
return new (this.modelConstructor as any)();
代码编译无误。然而,这是不幸的。有没有什么办法可以在不使用强制转换的情况下使这段代码可编译?如果没有,为什么不呢?
您应该改用此模式:
abstract class ModelFactory<T extends Model> {
constructor(private modelConstructor: new () => T) { }
public create(): T {
return new (this.modelConstructor)(); // OK!
}
}
class UserFactory extends ModelFactory<User> {
constructor() {
super(User);
}
}