2016-10-15 25 views
3

宣言インポート*対Typescript/ES6のインポート{specificName}?

declare module "MyModule" { 

export function Foo() {...} 
export function Bar() {...} 

} 

は、私はちょうど私がそれをインポートする必要がありますどのように、どこかのFooが必要ですか?

import * as MyModule from "MyModule"; 

MyModule.Foo(); 

または

import {Foo} from "MyModule"; 
Foo() 

1が他よりも良いですか?最初の方法ですべての輸出品を輸入するというパフォーマンス上の影響はありますか?

私が質問を投稿する前に読んでいくつかの参照:

https://www.exratione.com/2015/12/es6-use-of-import-property-from-module-is-not-a-great-plan/

+2

あなたが必要とするのが 'Foo'であれば、' * as MyModule'はここでも考慮されていますか? – estus

+0

http://stackoverflow.com/questions/147454/why-is-using-a-wild-card-with-a-java-import-statement-bad –

+1

@SandeepRoy私はJavaScriptについて話しており、ここでは混乱していません名前空間。 –

答えて

4

あなたのコードに必要は、当然のことながら、良い習慣ですされているもののみインポート。誰かが何千行ものコードをすべて読み込んで書いているとしたら、それを分析しようとします。あなたのコードで使われている関数がインポートされているかどうかを簡単に知ることができると思いますか?明らかにそれは疑わしいと悪い練習

パフォーマンスに関しては、あまり影響を受けていないと思われます。

1

Fooのみを使用する必要がある場合は、Fooをインポートする方が良いと思います。このコードを使用すると、そのコードが使用しているMyModuleの要素を知ることができるため、コードがより明確になります。

ファイル全体を読み書きする必要があるため、パフォーマンスには影響しません。

また、Rollup.jsのようなバンドルを使用するときはどのオプションを選択しても問題ありません。MyModuleからすべてをインポートしても、実際にコードで使用するものだけがバンドルに含まれます。

+0

私はtreeshakingをサポートするバンドラを使用しているとは思わない。 –

1

import {} from ...構文は、機能のスタブとスパイを非常に困難にし、通常はrewire.jsなどの追加ライブラリが必要です。警告は木の揺れでもうまくいきません。私は自分のutilモジュールを小さく保つ傾向があり、たぶんモジュールごとに2-3個の関数しか含めることはできません。そうすれば私のモジュールにはimport * as ...の構文を、サードパーティのモジュールには可能であればimport {} ...を使用できます。木の揺れの必要性を最小限に抑えます。

関連する問題