大圖:我的組織有幾個用TypeScript編寫的Angular應用程序,每個應用程序都包含大量重複的代碼。我們已經開始將我們可重複使用的TypeScript代碼打包爲NPM包並將它們發佈到TFS 2017中的私有NPM註冊表中。我們使用Gulp將可重用TypeScript代碼編譯爲JavaScript(使用gulp-typescript)並使用「聲明「tsconfig.json中的屬性強制產生一個.d.ts文件。這是有效的,並且.d.ts文件與NPM包中的JavaScript輸出一起包含在客戶端應用程序中。但是,在消費應用程序中引用其中的類型不起作用,除非我直接在消費應用程序中引用.d.ts文件,而我希望避免這種情況。如何引用在NPM包中由tsc的「聲明」選項生成的TypeScript .d.ts文件中聲明的類型?
我們使用TypeScript 2.5和@types方法來訪問第三方類型,所以例如Angular我在package.json文件中有「@ types/angular」:「1.6.32」 - 這會導致node_modules \ @types \ angular \ index.d.ts成立時,Visual Studio似乎神奇地發現,當我在TypeScript文件中鍵入ng.IServiceProvider時,該文件提供了強大的類型檢查。
但是,它並沒有神奇地發現我自己的Typings文件,它位於node_modules \ my-package \ dist \ my-package.d.ts。但是,如果我將其添加到TypeScript文件中:
/// <reference path="../../../node_modules/my-package/dist/my-package.d.ts" />
然後我可以引用文件中定義的類型。然而,這不是一個很好的解決方案,因爲它意味着每個消費應用程序都需要知道node_modules文件夾中的路徑,以及我創建的每個自定義類型文件。據推測這是@types語法應該避免的。
有沒有一種方法,使消費項目神奇發現包含與NPM包內自定義分型文件(相對於分型是在他們自己的權利發佈爲包文件?)我知道我可以做後者,但我真的不想爲每個我們創建的自定義NPM包創建一個單獨的@types包,只要我能避免它。