与类实现

时间:2017-12-21 04:49:46

标签: typescript typescript2.0 typescript2.6

好的,我有一个多代码库项目

我在代码库P1中有一个类:

class ClassInP1 {


}

但我需要在另一个代码库P2中引用该类的类型,但我不想安装P1作为P2的依赖项。 要清楚:P1导入P2,但我不希望P2导入P1!

最好的方法是在P2中创建一个接口并让ClassInP1实现该接口吗?像这样:

import {InterfaceFromP2} from 'P2';

class ClassInP1 implements InterfaceFromP2 {



}

唯一令人讨厌的事情是,它不是100%干的......这个类几乎都是自我记录的,但是后来我在界面中重复了很多,但我想这就是& #39;并不是一件大事。

1 个答案:

答案 0 :(得分:1)

注意:我在这里使用命名空间来创建一个独立的演示 - 命名空间演示了这个概念,但不需要这些工作。

TypeScript本质上是精美的结构,这意味着只有在命名上下文中识别某些内容时,名称才有意义。在使用类型时,它们只需要兼容(具有所需的结构)。

namespace A {
    export class ExampleOne {
        name: string;
        size: number;
    }
}

namespace B {
    export class ExampleOne {
        name: string;
        size: number;
    }

    export class ExampleTwo {
        name: string;
        size: number;
        volume: number;
    }
}

function logExample(example: A.ExampleOne) {
    console.log(example.name);
}

logExample(new A.ExampleOne());

logExample(new B.ExampleOne());

logExample(new B.ExampleTwo());

我可以在任何命名上下文(命名空间,模块)中重用名称ExampleOne

我可以将与A.ExampleOne兼容的任何值传递到logExample函数中。它不必是确切的类,子类,甚至是类 - 只要在结构上是兼容的。

所以你可以拥有

class ClassInP1

}

不继承原始ClassInP1,也不创建界面。