2017-10-09 668 views
0

大圖:我的組織有幾個用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包,只要我能避免它。

回答

0

我找到了一種方法,使這項工作:

{ 
    "name": "my-package", 
    "main": "./dist/my-package.js", 
    "types": "./dist/my-package.d.ts" 
} 

在您需要將引用添加到捆綁的類型包裝如上圖所示的NPM包中的package.json文件。這使得Visual Studio爲包中包含的類型提供引用並提供intellisense。

相關問題