【发布时间】:2019-11-17 09:02:47
【问题描述】:
我正在使用 Typescript 构建一个应该支持第三方插件的库。库的构造函数应该接受核心库和所有插件的选项,因为模块将在构造函数中加载它们。
是否可以提供一个基本的Options 接口,每个插件都可以扩展它以添加自己的属性和类型,以便在整个顶级应用程序(使用库和插件)中,Options 接口反映核心选项和插件选项?
所以有了这样的依赖结构:
- user-app
|- my-library
|- my-library-plugin-a
|- my-library-plugin-b
my-library 定义如下:
export interface Options {
coreOption : string;
}
而my-library-plugin-a 将其扩展如下:
export interface PluginAOptions extends Options {
pluginA : boolean;
}
而my-library-plugin-b 扩展如下:
export interface PluginBOptions extends Options {
pluginB : Record<string, string>;
}
对于 user-app 的开发人员,它的依赖项中包含所有三个模块,从 my-library 导出的 Options 接口应如下所示:
interface Options {
coreOption : string;
pluginA : boolean;
pluginB : Record<string, string>;
}
这就是他们的自动完成应该显示的内容,以及 Typescript 编译器应该检查的内容。
Typescript 可以实现这样的事情吗?
【问题讨论】:
-
@Li357 我问题中的关键词是“第三方”。换句话说,我不能将类型提取到共享模块中,因为我不是唯一拥有类型的人。其他开发人员应该能够制作插件并根据需要将它们发布到 npm。
-
好的,然后从您的库中导出您的类型,以便可以导入和扩展它们。
-
我的观点是插件 A 和插件 B 都应该从核心库扩展类型,并且所有三个模块的用户应该看到包含核心和插件 A 和 B 添加的所有内容的统一类型。只是扩展插件中的类型当然很容易做到。但我正在寻找一种方法让这些扩展“冒泡”到顶级程序。
-
我已经更新了我原来的问题,试图让我的问题更清楚。
标签: node.js typescript inheritance interface