2017-04-23 80 views
0

我有一個顯然使用lodash的angular2應用程序。但我也有父項目中的下劃線字符串underscore.js。如何在打字稿中引用下劃線而不是lodash

現在打字稿編譯器抱怨lodash上缺少方法。 但我不是指lodash,因爲該方法是在下劃線。

Property 'classify' does not exist on type 'LoDashStatic' 

我該如何抑制這樣的錯誤?

+1

你是如何導入在強調你的TypeScript文件? – Saravana

回答

2

由於您使用的角度我認爲你既然你正在使用的模塊是使用模塊

,你要麼裝載機或處理他們打包和你應該相應地使用下劃線。

正如在Saravana的回答中,您應該先安裝@ types/underscore軟件包。

此外會讓你應該卸載lodash類型,如果你不使用它們

npm uninstall --save @types/lodash 

npm install --save @types/underscore 

但是,直接從@types包導入是不正確的使用,同時使用下劃線作爲一個全球性的代表未能槓桿模塊。

下面是安裝類型包後應如何引用下劃線的示例。

ES模塊< => CommonJS的互操作風格(首選)

import _ from 'underscore'; // note the absence of @types from the path 

如果打字稿提出了這個錯誤,但它的工作原理在運行時,在你的tsconfig.json文件中設置"allowSyntheticDefaultImports": true

如果在運行時失敗,請嘗試其他方法之一。

打字稿CommonJS的作爲命名空間互操作風格(非標)

import * as _ from 'underscore'; 

打字稿CommonJS的風格(也可以與AMD/UMD)

import _ = require('underscore'); 
+0

非常感謝您的詳細解釋。重點在於我不想在模塊中導入下劃線。它已經包含在另一個包中。通過將它導入角度,我最終會得到兩個導入的下劃線庫,對吧?!因此,獲取代碼完成和引用就像這樣:「從@ types/underscore」導入{UnderscoreStatic};「符合我的需求。 – dc10

+0

_「通過將它導入角度,我最終會得到兩個導入的下劃線庫,對嗎?!」_ no,只有當其他軟件包將其包含爲全局而不是正確導入時。 –

+0

但是即使你使用'declare const _:UnderscoreStatic;'解決方案,它仍然是一個等待發生的錯誤,即你正在從'@ types'中導入。 –

1

你可以安裝@types/underscore,然後只需要導入你想使用的方法,它不會拋出任何錯誤。不要忘記添加到類型tsconfig.json文件

相關問題