2016-08-24 59 views
1

我有一个名为MyClass的类。它有一堆属性。 我想创建一个包含该类的选项的接口。许多选项的名称和输入都与MyClass相同,但不是全部。Typescript:基于类创建接口

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

目标是尽可能少的复制。

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

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

许多选项具有相同的名称和打字比MyClass的,但不是全部。

如果是这样的话,有没有一个很好的选择。

如果你想有完全相同相同的成员,和你的类没有任何privateprotected属性/方法,你可以写

interface MyClassOptions extends MyClass { 
    extraProp: string; 
} 

有一两件事你可以做的是做一个基地只需要你想要共享的选项,就可以从那里使用你所使用的作为基类派生的“真实”类的接口。

+0

我忘了明确提到的一件事是'MyClassOptions'中的所有属性都是可选的。该解决方案使所有属性都是非可选的。 – RainingChain