2016-10-15 145 views
3

宣言在Typescript/ES6中導入* vs導入{specificName}?

declare module "MyModule" { 

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

} 

我只需要富的地方,我應該怎麼導入呢?

import * as MyModule from "MyModule"; 

MyModule.Foo(); 

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

哪一個比另一個好?以第一種方式導入所有出口是否有任何性能影響?

我在提問之前先閱讀一些參考:

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

+2

爲什麼'* as MyModule'即使在考慮這裏,如果你只需要'Foo'? – 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

我不認爲我們正在使用任何支持treehaking的bundler。 –

1

import {} from ...語法使得上的功能非常困難的存根和間諜,通常需要額外的庫,如rewire.js。警告是樹顫抖不起作用。我傾向於保持我的util模塊很小,也許每個模塊只包含2-3個函數。這樣我可以使用import * as ...語法爲我的模塊和import {} ...儘可能第三方模塊。從而最大限度地減少樹木搖晃的需要。