2016-09-24 17 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("...")) { /* ... */ } 
} 

Question1:

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

このコード上の行の後、ZipCodeValidatorが既にロードされ、現在のファイルのモジュールでジップとして利用できます。なぜ後のif条件で次のコード行で再度ロードするのですか?

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

Noted:同じモジュールを別の方法でロードします.1つはインポート、もう1つはrequireです。なぜ異なる方法を使用していますか?

Question2:

なぜあなたは関数のシグネチャを必要と宣言する必要がありますか?宣言は何をしますか?宣言されている場合は、実装はどこですか?

答えて

1

表示している例は、モジュールをインポートする特定の方法を実装することです。これは、条件付きでモジュールをインポートする方法を示しています。これは、私があなたがいつもやる必要はないと思う特別なケースです。

だから、あなたがこれを実行した後、特に

  1. をご質問にお答えします:TSコンパイラはジップが唯一のタイプの位置で使用されている場合、それはロードべきではないことを知っているのに十分スマートですimport { ZipCodeValidator as Zip } from "./ZipCodeValidator";モジュール2番目のrequireステートメントは、実際のインポートが行われる場所です。

  2. declareは、TSが特別なrequireキーワードを知っていることを確認するために必要です。 node.jsの入力ライブラリを使用している場合は、これを明示的に行う必要はありません。

関連する問題