我正在使用Typescript构建一个应该支持第三方插件的库。库的构造函数应接受核心库和所有插件的选项,因为模块会将它们加载到构造函数中。
是否可以提供一个基本的Options
接口,每个插件都可以扩展以添加自己的属性和类型,以便在整个顶层应用程序(使用库和插件)中,{{1 }}界面既反映了核心选项,也反映了插件的选项?
因此具有这样的依赖关系结构:
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
导出的Options接口应如下所示:
my-library
这就是自动填充应该显示的内容,以及Typescript编译器应检查的内容。
Typescript完全可以实现这样的功能吗?
答案 0 :(得分:0)
您不能指望从my-library
获得全部扩展选项。
这与TypeScript无关,而与依赖性如何工作有关。
my-library
对插件一无所知。
如果它能够以某种方式导出插件添加的选项,则将取决于那些插件,从而使插件体系结构毫无意义。
在user-app
中,您应该只使用plugin-a
和plugin-b
中的选项并将其组合。
const theOption: PluginAOptions & PluginBOptions = { ... }
user-app
是认识并决定使用plugin-a
和plugin-b
的人。
这就是为什么它应该并且可以使用那些插件中的类型。