2017-08-30 6 views
4

Typescript documentation (section "Guidance for structuring modules")によると:「エクスポートのデフォルト」がAngularで推奨されないのはなぜですか?

あなただけの「トップレベルの近くにエクスポートすると、」あなたの 上の摩擦を低減同様に輸出 デフォルト

を使用し、単一のクラスや関数をエクスポートしている場合モジュールの消費者は、デフォルトのエクスポートを導入します。 モジュールの主な目的が1つの特定のエクスポートを格納することである場合、 はデフォルトのエクスポートとしてエクスポートすることを検討する必要があります。これにより、インポートと少し実際にインポートを使用して 両方を行います。

例:Angular documentation for components

export default class SomeType { 
    constructor() { ... } 
} 

(例えば)一つは、これを見ている:

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; } 
} 

一般に、コンポーネントのまたはモジュールの主な目的は、一つの特定のエクスポートを収容することです。 Angularがexport defaultを使用したり推奨したりする理由はありますか?

+0

で/他の支店であれば - 一貫性のため、変更を最小限に抑えるための2番目のステートメントまたはエクスポートを追加する必要があるときにコードに追加します。そして整合性が実際にインポートを容易にします - 私は何かをインポートする必要があるたびに、モジュールがデフォルトのエクスポートを持っているかどうかを確認する必要はありません。 – artem

+2

TypeScript言語の問題をこの質問と混同しないでください。私はどこかで、コンポーネントのデフォルトのエクスポートが、事前にコンパイラをAngularで壊しているのを読んだ。なぜこのようなことが起こるのか分かりませんが、時にはドキュメンテーションに従ってください。この問題を明確にするために、Angularチームの権限者の回答を使用することができます。そのため、私はそれを締め切らないように頼んだのです。それは完全に良い質問です。私はタブやスペースの問題としてそれを書いている人が好きではありません。 – cgTag

答えて

5

これはAOTコンパイラでは機能しませんが、JITコンパイラでは機能します。したがって、AOTを使用している場合(またはAOTを使用したい場合)、デフォルトのエクスポートは行わないでください。 も参照してくださいhere

デフォルトの輸出

デフォルトの輸出はIBMアカデミーで許可されていません - 彼らはすべての名前を付ける必要があります。

❌DONT:

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

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

} 

✅DO:

おそらく人々は、単一の文の周りに括弧を使用するのと同じ理由で
import { Component } from '@angular/core'; 

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

} 
+1

他の** DONT'S **も面白いです。誰かが不思議に思っている場合、「プライベートプロパティ」の最後の行は、「それらの上の@internalコメントを使用するか、** public **」にする必要があります。 –

関連する問題