【发布时间】:2018-03-20 21:30:43
【问题描述】:
大图:我的组织有几个用 TypeScript 编写的 Angular 应用程序,每个应用程序都包含大量重复的代码。我们已经开始将可重用的 TypeScript 代码打包为 NPM 包并将它们发布到 TFS 2017 中的私有 NPM 注册表。我们正在使用 Gulp 将可重用的 TypeScript 代码编译为 JavaScript(使用 gulp-typescript)并使用“声明" tsconfig.json 中的属性以强制生成 .d.ts 文件。这是可行的,并且 .d.ts 文件包含在 NPM 包中的 JavaScript 输出旁边,该包安装在客户端应用程序中。但是,在消费应用程序中引用其中的类型是行不通的,除非我直接在消费应用程序中引用 .d.ts 文件,我想避免这种情况。
我们使用带有 @types 方法的 TypeScript 2.5 来访问第三方类型,例如使用 Angular 我在 package.json 文件中有 "@types/angular": "1.6.32" - 这会导致 node_modules\@ types\angular\index.d.ts 出现,当我在 TypeScript 文件中键入 ng.IServiceProvider 时,Visual Studio 似乎神奇地发现该文件提供了强大的类型检查。
它并没有神奇地发现我自己的位于 node_modules\my-package\dist\my-package.d.ts 的 Typings 文件。但是,如果我将其添加到 TypeScript 文件中:
/// <reference path="../../../node_modules/my-package/dist/my-package.d.ts" />
然后我可以引用文件中定义的类型。但是,这不是一个很好的解决方案,因为这意味着每个使用应用程序都需要知道 node_modules 文件夹中我创建的每个自定义 Typings 文件的路径。大概这就是 @types 语法应该帮助避免的。
有没有办法让消费项目神奇地发现包含在 NPM 包中的自定义类型文件(与单独作为包发布的类型文件相反?)我知道我可以做后者,但如果可以避免的话,我真的不想为我们创建的每个自定义 NPM 包创建单独的 @types 包。
【问题讨论】:
标签: typescript npm typescript-typings