在Typescript/ES6中导入*vs import {specificName}?

Har*_*dhi 8 javascript amd typescript ecmascript-6

宣言

declare module "MyModule" {

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

}
Run Code Online (Sandbox Code Playgroud)

我只是需要Foo,我应该如何导入它?

import * as MyModule from "MyModule";

MyModule.Foo();
Run Code Online (Sandbox Code Playgroud)

要么

import {Foo} from "MyModule";
Foo()
Run Code Online (Sandbox Code Playgroud)

哪一个比另一个好?以第一种方式进口所有出口是否有任何性能影响?

我在发布问题之前阅读的一些参考文献:

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

Rax*_*ber 6

当然,只导入代码所需的内容是很好的做法。假设有人编写了一些导入所有内容的千行代码,然后您尝试对其进行分析。您认为您很容易知道代码中使用的哪些函数是导入的,哪些不是?显然这是一种可疑和不好的做法

至于性能,我想影响不大。


小智 5

import {} from ...语法使对函数的存根和监视非常困难,并且通常需要其他库,例如rewire.js。需要注意的是,摇树也没有效果。我倾向于将util模块保持较小,每个模块可能只包含2-3个功能。这样,我可以import * as ...对模块使用语法,并import {} ...在可能的情况下对第三方模块使用语法。因此,减少了摇树的需要。