【发布时间】:2015-11-25 19:08:36
【问题描述】:
如果我们指定默认导出:
export class Foo {}
export default Foo;
那么我们可以在导入期间省略花括号(如this answer 中所述):
import { Foo } from "foo"; // becomes:
import Foo from "foo";
这很好,但是在特定情况下是否有任何非风格的理由偏爱其中一种?例如,是否存在某种约定,或者一种与某些工具不兼容,或者一种具有不同的含义?
(基于this discussion 和其他人,我的理解是export default 可能是作为处理单个主要对象(如$)导出的一种方式出现的,现在由import * as foo from "foo" 处理.此外,似乎默认导入语法不强制一致命名(import fooAlias from "foo"),而标准导入import { fooAlias } from "foo"将是编译错误,除非别名是明确的(Foo as fooAlias)。除此之外,我没有'找不到太多关于何时应该使用其中一个的信息。)
【问题讨论】:
-
是的,它应该在模块只定义一个对象(或一般的值)时使用。请注意
import * as $ from "jquery";不起作用 - 您希望$成为函数而不是命名空间对象。 -
@Bergi 对,但是通过
import { $ } from "jquery"省略默认导出和导入会有所不同吗?我什么时候会使用其中一个?export default是否需要? -
默认导出通常是最重要的值,即使用频率更高的值。默认导出只是另一个具有特殊名称
default的命名导出,因此import { default as $ } from 'jquery'等同于import $ from 'jquery'。 -
@mk.:使用命名导出更加冗长(
import { jQuery as $ } …),您需要记住导出的名称 - 并重复一遍,因为它在任何地方都是一样的。不,不需要默认导出,它们只是为了方便。
标签: javascript typescript ecmascript-6