打字稿:根据类创建界面

时间:2016-08-24 00:58:24

标签: 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;
}

1 个答案:

答案 0 :(得分:1)

  

许多选项与MyClass具有相同的名称和输入,但不是全部。

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

如果您希望完全相同的成员,并且您的班级没有任何privateprotected属性/方法,您可以写

interface MyClassOptions extends MyClass {
  extraProp: string;
}

你可以做的一件事是创建一个只有你想要共享的选项的基类,从那里创建接口,你使用的“真正的”类是基类的派生。