为什么角度使用`import {SomeComponent}来自' some.component.ts'`而不是`import SomeComponent from' some.component.ts'`

时间:2018-01-05 07:18:02

标签: javascript angular typescript ecmascript-6

我写了React / Vue。像往常一样,我喜欢导出/导入默认组件。

// export
export default class SomeComponent from Component {
    // blahblah
}

// import
import SomeComponent from './some.js'

但是当我使用angular2 +时,我发现了一件奇怪的事情。 它使用破坏性的导入/导出形式。

// export
@Component({/* ... */})
export class SomeComponent {
    // blahblah
}

// import
import {SomeComponent} from './some.component.ts'

为什么呢?我认为这有点麻烦。它由Typescript规则或贡献者定义?

5 个答案:

答案 0 :(得分:1)

如果您在default之前添加class,那么您将能够以与React / Vue相同的方式导入。

答案 1 :(得分:1)

打字稿或javascript文件可以导出多个类(或函数,常量)。由于这种行为,您以这种方式导出您的类(或函数,常量):

export class MyClass{}

以这种方式导入:

// import
import {MyClass} from './myClass.ts'

如果您确定只导出单个类(或函数,常量),那么只需使用以下语法:

//export
export default class MyClass{}
//import
import MyClass from "./myclass.ts"

答案 2 :(得分:0)

这是标准行为。

它允许您从文件中导出多个内容。

例如

export class MyClass {}
export const MyClassMockedForTesting = {};

但是如果你想改变它,你可以像{/ p>那样使用default关键字

export default class MyClass {}

它会导出你的课程,你不再需要括号了。

答案 3 :(得分:0)

Angular不对其包使用默认导入,因为默认导入不好。其他人已经介绍了为什么在单独的帖子中所以我会链接到这里。 https://blog.neufund.org/why-we-have-banned-default-exports-and-you-should-do-the-same-d51fdc2cf2ad

答案 4 :(得分:0)

如果您使用'从某个组件导入一些'除非somecomponent中只有一个导出moudel,如果有多个导出模块,则必须使用{}指定导入moudle