什么时候应该在JavaScript/TypeScript中使用`export default`?

mk.*_*mk. 5 javascript typescript ecmascript-6

如果我们指定默认导出:

export class Foo {}
export default Foo;
Run Code Online (Sandbox Code Playgroud)

然后我们可以在导入期间省略花括号(如本答案中所述):

import { Foo } from "foo"; // becomes:
import Foo from "foo";
Run Code Online (Sandbox Code Playgroud)

那很好,但是在特殊情况下是否有任何非风格的理由偏爱另一个?例如,是否存在某些约定,或者某些约定与某些工具不兼容,或者是否具有不同的含义?

(基于这个讨论和其他人,我的理解是,export default可能已经出现了一种处理单个主要对象(如$)的导出的方法,现在由import * as foo from "foo"它处理.此外,似乎默认导入语法不强制执行naming(import fooAlias from "foo"),而标准导入import { fooAlias } from "foo"将是一个编译错误,除非别名是explicit(Foo as fooAlias).除此之外,我还没有找到关于何时应该使用其中一个的详细信息.)

glu*_*ued 1

导出默认值可以允许您在导入时重命名文件,以便...

foo.js

export default class Foo{
  constructor(){
  }
}
Run Code Online (Sandbox Code Playgroud)

可以import Bar from './foo';位于另一个文件中,如果您正在使用库并且已经定义了类 Foo,这可能会很有用。

您还可以导出默认值和非默认值,以便: import Foo, { someVariable, someMethod } from './foo';