大图:我的组织有几个用TypeScript编写的Angular应用程序,每个应用程序都包含大量重复的代码。我们已经开始将可重复使用的TypeScript代码打包为NPM包并将它们发布到TFS 2017中的私有NPM注册表。我们正在使用Gulp将可重用的TypeScript代码编译为JavaScript(使用gulp-typescript)并使用&# 34;声明" tsconfig.json中的属性强制生成.d.ts文件。这很有效,并且.d.ts文件包含在NPM包中的JavaScript输出旁边,该包安装在客户端应用程序中。但是,在消费应用程序中引用其中的类型并不起作用,除非我直接在消费应用程序中引用.d.ts文件,我不想这样做。
我们正在使用带有@types方法的TypeScript 2.5来访问第三方类型,例如使用Angular我有" @ types / angular":" 1.6.32"在package.json文件中 - 导致node_modules \ @types \ angular \ index.d.ts出现,当我在TypeScript文件中键入ng.IServiceProvider时,Visual Studio似乎神奇地发现该文件提供强类型检查。
然而,它并没有神奇地发现我自己的Typings文件,该文件位于node_modules \ my-package \ dist \ my-package.d.ts。但是,如果我将其添加到TypeScript文件中:
/// <reference path="../../../node_modules/my-package/dist/my-package.d.ts" />
然后我可以引用文件中定义的类型。但是,这不是一个很好的解决方案,因为它意味着每个消费应用程序都需要知道node_modules文件夹中的路径到我创建的每个自定义Typings文件。据推测,这就是@types语法应该有助于避免的内容。
有没有办法让耗费项目神奇地发现包含在NPM包中的自定义打字文件(而不是单独作为包发布的打包文件?)我知道我可以做后者,但我真的不想为我们创建的每个自定义NPM包创建一个单独的@types包,如果我可以避免的话。
答案 0 :(得分:0)
我找到了一种方法来完成这项工作:
{
"name": "my-package",
"main": "./dist/my-package.js",
"types": "./dist/my-package.d.ts"
}
在NPM包的package.json文件中,您需要添加对捆绑类型包的引用,如上所示。这使Visual Studio获取引用并为包中包含的类型提供intellisense。