在库中提供可扩展的Typescript接口

时间:2019-07-07 18:19:06

标签: node.js typescript inheritance interface

我正在使用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完全可以实现这样的功能吗?

1 个答案:

答案 0 :(得分:0)

您不能指望从my-library获得全部扩展选项。

这与TypeScript无关,而与依赖性如何工作有关。 my-library对插件一无所知。 如果它能够以某种方式导出插件添加的选项,则将取决于那些插件,从而使插件体系结构毫无意义。

user-app中,您应该只使用plugin-aplugin-b中的选项并将其组合。

const theOption: PluginAOptions & PluginBOptions = { ... }

user-app是认识并决定使用plugin-aplugin-b的人。 这就是为什么它应该并且可以使用那些插件中的类型。