好的,我有一个多代码库项目
我在代码库P1中有一个类:
class ClassInP1 {
}
但我需要在另一个代码库P2中引用该类的类型,但我不想安装P1作为P2的依赖项。 要清楚:P1导入P2,但我不希望P2导入P1!
最好的方法是在P2中创建一个接口并让ClassInP1
实现该接口吗?像这样:
import {InterfaceFromP2} from 'P2';
class ClassInP1 implements InterfaceFromP2 {
}
唯一令人讨厌的事情是,它不是100%干的......这个类几乎都是自我记录的,但是后来我在界面中重复了很多,但我想这就是& #39;并不是一件大事。
答案 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
,也不创建界面。