我有一个名为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;
}
答案 0 :(得分:1)
许多选项与MyClass具有相同的名称和输入,但不是全部。
如果是这种情况,那就没有一个好的选择。
如果您希望完全相同的成员,并且您的班级没有任何private
或protected
属性/方法,您可以写
interface MyClassOptions extends MyClass {
extraProp: string;
}
你可以做的一件事是创建一个只有你想要共享的选项的基类,从那里创建接口,你使用的“真正的”类是基类的派生。