【问题标题】:Typescript: Create interface based on a classTypescript:基于类创建接口
【发布时间】:2016-12-30 23:19:18
【问题描述】:

我有一个名为 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;
}

【问题讨论】:

    标签: javascript class typescript


    【解决方案1】:

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

    如果是这样,那就不是一个好的选择。

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

    interface MyClassOptions extends MyClass {
      extraProp: string;
    }
    

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

    【讨论】:

    • 我忘记明确提及的一件事是MyClassOptions 中的所有属性都是可选的。此解决方案使所有属性都不是可选的。
    猜你喜欢
    • 2016-02-03
    • 2021-12-03
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多