javascript - Typescript 中的抽象内部类

标签 javascript typescript ecmascript-6 polymorphism

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"); }
    }
}

并且代码将是类型安全的。

Playground

------已编辑------

如果您希望 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/

相关文章:

javascript - 如何使背景图像滚动速度比页面慢?

javascript - 如何缩放 webview 使其文本内容不会换行?

javascript - Outlook Online 如何下载附件?

Angular - HttpClientModule 应该位于 CoreModule 的 Exports 数组中吗?

javascript - 在创建 React 组件时,我应该使用功能组件,React.createClass 还是 extends React.Component?

javascript - 如何从 url 中提取 id?

c# - 最佳实践,如何为 css、javascript 和图像文件指定相对路径?

typescript - 如何对非 nullCheck 安全的库使用 strictNullChecks

javascript - 将 typescript 对象转换为 json 字符串

javascript - 将命令行变量传递给 npm 脚本?