javascript - Typescript:基于类创建接口(interface)

标签 javascript class typescript

我有一个名为 MyClass 的类。它有很多属性。 我想创建一个包含该类选项的界面。许多选项与 MyClass 具有相同的名称和类型,但并非全部。

编辑:大多数选项属性都是可选的。

目标是尽可能少地重复。

现在,我使用虚拟对象来避免代码重复。还有比这更干净的解决方案吗?

class MyClass {
    callback:(p0:number,p1:string,p2:string[]) => number[];
    myAttr:number;
    composed:string;

    constructor(options:MyClassOptions){
        if(options.callback !== undefined)
            this.callback = options.callback;
        if(options.myAttr !== undefined)
            this.myAttr = options.myAttr;
        if(options.composedP1 !== undefined && options.composedP2 !== undefined)
            this.composed = options.composedP1 + options.composedP2;
    }
}

var dummy = <MyClass>null; 
interface MyClassOptions {
    callback?:typeof dummy.callback;
    myAttr?:typeof dummy.myAttr;
    composedP1:string;
    composedP2:string;
}

最佳答案

Many options have the same name and typing than MyClass, but not all.

如果是这种情况,那就不是一个好的选择。

如果您希望拥有完全相同相同的成员,并且您的类没有任何私有(private) protected 属性/方法,您可以可以写

interface MyClassOptions extends MyClass {
  extraProp: string;
}

您可以做的一件事是创建一个仅包含您想要共享的选项的基类,从那里使用您使用的“真实”类作为基类的派生类来创建界面。

关于javascript - Typescript:基于类创建接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39112853/

相关文章:

reactjs - typescript 将样式化的组件 Prop 与父级 Prop 合并

javascript - 如何在 OL3 中使用 SLD 设置图层样式

javascript - 如何在 durandal 中组织应用程序?

javascript - 从 csv 文件转换为按列名称选择的特定列的数组

c++ - 在 C++ 中玩弄字符串,分析字符并通过类创建功能

python - 传递不同的输入参数时创建默认类对象

javascript - 如何将外部 HTML 文件导入 TypeScript 类

javascript - Nodejs,观察类字段的变化

javascript - 为什么状态没有按预期更新?

c++ - 在类或函数声明中间的宏