2016-10-15 139 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 {} ...尽可能第三方模块。从而最大限度地减少树木摇晃的需要。