2016-11-29 99 views
2

我在嘗試瞭解如何使用外部模塊,而非模塊.d.ts提供的方式?如何爲模塊使用外部.d.ts

我試圖使用xlsx,它沒有類型定義,並用@types/xlsx包裝它。

npm install編他們都想通我應該引用添加到typings/index.d.ts如下:/// <reference path="../node_modules/@types/xlsx/index.d.ts" />

現在我發現很難理解什麼纔是我需要進口嘗試與所提供的類型定義使用xlsx

也許我只是把它弄錯了,有一個更簡單的方法。

+0

import xlsx = require(「../ node_modules/@ types/xlsx/index」); –

+0

@Ramakant我認爲import = require是爲沒有dts的模塊完成的,你說我應該在dts本身上做到這一點?這個導入的星形將如何連接到xlsx的js源代碼? –

回答

1

通常,現在您不應該永遠需要手動添加/// <reference...引用。如果你已經使用NPM安裝了你的類型定義,那麼它們應該被自動包含在你的編譯過程中。

所有你需要做的就是導入模塊並開始使用它。例如,在一個新的空測試項目我剛剛安裝XLSX(npm install xlsx @types/xlsx),我現在可以成功編譯和運行以下:

import xlsx = require("xlsx"); 
var workbook = xlsx.readFile("test.xlsx"); 

這應該是你所需要的。

+0

感謝您的回答Tim,也許我在第一次遇到'import XX = require('XXX')'時意識到錯了,但是當我不需要導入d.ts時,我不想導入要導入的模塊? 'xlsx'不會被輸入正確的?我怎麼能通過外部d.ts從'xlsx'執行'import {IWorkBook}的行爲?我希望能夠定義'let workbook:IWorkBook = xlsx.readFile('test.xlsx');' –

+0

不,它實際上是非ES6模塊導入的正確語法,並且在這種情況下首選。請參閱http://stackoverflow.com/a/29598404/68051。你可能會想'var XX = require('XXX')',它不包含類型。通過上面的例子'xlsx'實際上是在這裏正確輸入的;如果你嘗試用'xlsx.abc()'添加中間行,它將不會編譯,因爲它知道這是一個無效的方法。 –

+0

如果你想使用新的語法,你可以從'xlsx''編寫import *作爲xlsx,然後使用'xlsx.IWorkBook'或'xlsx.readFile',或者你可以單獨導入它們,如果你願意'從「xlsx」'導入{readFile,IWorkBook}。通常對於非ES6模塊,我總是使用舊的語法('import X = ...'),因爲如果他們使用'module.exports = ...',新語法在技術上是無效的。 –

相關問題