2016-09-24 87 views
1

閱讀official document about Typescript module時我有點困惑。在Typescript中導入模塊的正確方法是什麼?

declare function require(moduleName: string): any; 
// why declare require? 
import { ZipCodeValidator as Zip } from "./ZipCodeValidator"; 
// Zip is being imported here, right? 
if (needZipValidation) { 
    let ZipCodeValidator: typeof Zip = require("./ZipCodeValidator"); 
    // Zip is already imported before if statement, why import again? 
    let validator = new ZipCodeValidator(); 
    if (validator.isAcceptable("...")) { /* ... */ } 
} 

問題1:

import { ZipCodeValidator as Zip } from "./ZipCodeValidator"; 

此以上的代碼行之後,ZipCodeValidator已經加載,並且可作爲當前文件的模塊中郵編。爲什麼後面的if條件在下面一行代碼中再次加載?

let ZipCodeValidator: typeof Zip = require("./ZipCodeValidator"); 

注意:它們使用不同的方法加載相同的模塊,一個是導入,另一個是需要的。爲什麼用不同的方式?

問題2:

爲什麼你需要聲明要求的函數簽名?聲明做什麼?如果聲明,實現在哪裏?

回答

1

您正在展示的示例是實現導入模塊的特定方式。這顯示瞭如何有條件地導入模塊。這是一個特例,我認爲你不需要一直做。

因此,要回答你的問題具體,

  1. 後你這樣做:import { ZipCodeValidator as Zip } from "./ZipCodeValidator";的TS編譯器是足夠聰明,知道如果郵編是在類型位置僅使用,那麼它應該不會加載該模塊。第二個要求聲明是實際導入的地方。

  2. 需要declare聲明以確保TS知道特殊的require關鍵字。如果您爲node.js使用類型庫,則不需要明確地執行此操作。

相關問題