2017-12-18 184 views
2

通過參考@types/foo,我們可以在TypeScript代碼中使用JavaScript庫的功能。但爲什麼?它只是定義了一堆數據類型和接口,但實際的邏輯仍然在JS代碼中。如何在不包含原始JS庫的情況下運行代碼?TypeScript包含沒有JS庫的@types的原理是什麼?

例如,要在TypeScript中實現地圖服務,我們只包含@types/googlemaps而沒有JS庫googlemaps。爲什麼這樣?

+0

一般來說,不,這不是它的工作原理。 – deceze

+0

添加「@ types/googlemaps」只包含該lib的類型定義,以便開發,但不會替換該lib。 lib仍然必須在運行時出現。 – Thomas

+0

它會是怎樣?你可以給一個不包含googlemaps lib的工作[MCVE](http://stackoverflow.com/help/mcve)嗎? – Pac0

回答

3

如果沒有實際庫,代碼將無法運行。一般來說,你會對@types有一個開發依賴,並且完全依賴於實際的庫。

這些類型用於爲庫回填類型信息,從而爲您提供自動完成,提示和類型檢查 - 但實際上它們在運行時並未提供任何內容。

在某些情況下,程序包將提供自己的類型,因此您不需要@types開發依賴項,但幾乎不存在相反的情況(唯一的例外情況是lib.d.ts不包括在內一個由瀏覽器等支持的功能,並且你暫時使用了一個定義來讓編譯器知道它)。

+1

非常感謝!我很快意識到我的谷歌地圖的例子是錯誤的,因爲我實際上在我的html中嵌入了它的api標籤。在這種情況下,不需要包含額外的'googlemaps' npm軟件包。 – Jize

相關問題