Typescript:如何从ts编译库扩展类

时间:2018-09-06 13:00:00

标签: typescript

我见过很多类似的问题,但它们与第一个问题不同。 我有一个用tsc编译的库,并且有一个应用程序。我在library.js中加入了app.jsindex.html。 在app.ts中,我尝试扩展在library.d.ts中键入的类,并且一切正常,直到有一个我想扩展到的类。

这里是example libraryexample application的链接。描述中包括重现正常构建和失败构建的步骤。

1 个答案:

答案 0 :(得分:1)

感谢您易于执行的复制步骤。通过阅读您正在使用的pip-webui-tasks构建系统的源代码,我弄清楚了正在发生的事情(该文件似乎文献不多)。 pip-webui-tasks基于Browserify。 Browserify使用“ last ”入口点作为主要模块,获取“入口点”文件列表并捆绑其依赖项。主模块是唯一可以在window.library上导出的模块。默认情况下,pip-webui-tasks将入口点列表设置为按路径的字典顺序列出的所有源文件的列表。在常规版本中,最后一个源文件按字母顺序恰好是src/services/index.ts,因此它成为您的主要模块,并且可以实现所需的行为。但是,当您添加src/services/other/other.ts时,它将成为您的主要模块。

在JavaScript捆绑包中进行上述操作时,.d.ts文件的编写就好像所有模块中的所有内容都已导出一样,这是不正确的。我认为这是pip-webui-tasks中的错误。

您将不必依赖pip-webui-tasks的默认行为,而需要在build.conf.js中指定自己的入口点列表。您可以使用src/services/index.ts作为最后一个列出所有文件,但是在确保导入和导出所需的所有内容之后仅指定src/index.ts可能会更容易。也就是说,您可以将以下内容添加到build.conf.js

browserify: {
    entries: ['src/index.ts']
},

以及以下src/index.ts

export * from './services';

有了这些更改,应用程序将以与正常构建相同的方式为我加载。