abstract class Model {
abstract class View extends ModelView<this>;
getView(){
return new View();
}
}
abtract class ModelView<M extends Model> {}
class Shape extends Model {
View = class {
constructor(){ console.log("view created"); }
}
}
我正在尝试实现这样的代码,我认为它结构良好。
在 React 中是否可以将一个类作为另一个类的子类,并将其作为抽象属性(最好是静态的)。
最佳答案
我想我明白了。
在像这样的 TS 语法中 attribute: Item { ...
意味着 attribute
是类 Item
的实例。如果您希望 attribute
成为类 Item(而不是实例),您应该使用如下语法 attribute: { new (...args): Item } {...
。所以最终的代码应该如下所示:
abstract class ModelView<M extends Model> {}
abstract class Model {
public View: { new(...args): ModelView<Model> };
getView(): ModelView<Model> {
return new this.View();
}
}
然后在Shape
类中你可以这样做:
class Shape extends Model {
View = class {
constructor(){ console.log("view created"); }
}
}
并且代码将是类型安全的。
------已编辑------
如果您希望 View 是静态且只读的,您必须将 getView
实现更改为:
public static readonly View: { new(...args): ModelView<Model> };
getView(): ModelView<Model> {
return new Model.View();
}
关于javascript - Typescript 中的抽象内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54989720/