为什么Angular不推荐"导出默认值"?

cam*_*kid 7 typescript angular

根据Typescript文档("结构模块指南"部分):

如果您只导出单个类或函数,请使用export default

正如"顶级附近的出口"减少了模块消费者的摩擦,引入默认导出也是如此.如果模块的主要用途是容纳一个特定的导出,那么您应该考虑将其导出为默认导出.这使导入和实际使用导入更容易一些.

例:

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

组件Angular文档中(例如),可以看到:

export class HeroListComponent implements OnInit {
  heroes: Hero[];
  selectedHero: Hero;

  constructor(private service: HeroService) { }

  ngOnInit() {
    this.heroes = this.service.getHeroes();
  }

  selectHero(hero: Hero) { this.selectedHero = hero; }
}
Run Code Online (Sandbox Code Playgroud)

通常,组件或模块的主要目的是容纳一个特定的导出.那么,Angular有没有使用或推荐使用的原因export default

And*_*aru 16

实际原因是这不适用于AOT编译器,但它可以与JIT编译器一起使用.因此,如果您正在使用AOT(或想要继续使用它),请不要执行导出默认设置.另请参见这里:

默认导出

AoT不允许默认导出 - 必须全部命名.

❌DONT:

import { Component } from '@angular/core';

@Component({
  template: `
    <div class="example">
      Example component!
    </div>
  `
})
export default class ExampleComponent {

}
Run Code Online (Sandbox Code Playgroud)

✅做:

import { Component } from '@angular/core';

@Component({
  template: `
    <div class="example">
      Example component!
    </div>
  `
})
export class ExampleComponent {

}
Run Code Online (Sandbox Code Playgroud)