2015-11-25 10 views
5

Wenn wir einen Standardexport angeben:Wann sollte ich `export default`in JavaScript/TypeScript verwenden?

export class Foo {} 
export default Foo; 

dann können wir geschweiften Klammern während des Imports auslassen (wie in this answer angegeben):

import { Foo } from "foo"; // becomes: 
import Foo from "foo"; 

ist das in Ordnung, aber gibt es eine nicht-stilistischen Grund bevorzugen Sie in bestimmten Fällen? Gibt es zum Beispiel eine Konvention oder ist sie mit bestimmten Werkzeugen nicht kompatibel oder hat sie eine andere Bedeutung?

(Basierend auf this discussion und andere, mein Verständnis ist, dass export default als ein Weg entstanden sind, könnten den Export eines einzigen, primären Objekt (wie $), die von import * as foo from "foo" behandelt wird nun der Handhabung. Außerdem ist es der Standard scheint Die Importsyntax erzwingt keine konsistente Benennung (import fooAlias from "foo"), während der Standardimport import { fooAlias } from "foo" ein Kompilierungsfehler wäre, es sei denn, der Alias ​​wäre explizit (Foo as fooAlias) .Außerdem konnte ich nicht viele Informationen darüber finden, wann ich einen verwenden sollte über die anderen.)

+0

Ja, es soll verwendet werden, wenn das Modul nur ein einzelnes Objekt (oder Wert im Allgemeinen) definiert. Beachten Sie, dass 'import * als $ aus" jquery ";' nicht funktionieren würde - Sie möchten, dass '$' eine Funktion und kein Namespace-Objekt ist. – Bergi

+0

@Bergi Recht, aber würde die Standard-Export und Import über 'Import {$} von" Jquery "' anders sein? Wann würde ich eins über dem anderen benutzen? Wird Export-Default überhaupt benötigt? –

+0

Ein Standardexport ist normalerweise der wichtigste Wert, d. H. Derjenige, der häufiger verwendet wird. Der Standard-Export ist nur ein anderer benannter Export mit dem speziellen Namen 'default', so dass' import {default as $} aus 'jquery''ist äquivalent zu' import $ from 'jquery''. –

Antwort

0

Export Standard können Sie die Datei beim Import so umbenennen ...

foo.js

export default class Foo{ 
    constructor(){ 
    } 
} 

import Bar from './foo'; in einer anderen Datei sein kann, könnte dies nützlich sein, wenn Sie eine Bibliothek verwenden und hat bereits eine Klasse Foo definiert.

Sie können auch eine Standard und einen nicht Standard exportieren, so dass: import Foo, { someVariable, someMethod } from './foo';

+0

Dies wäre die Art von Antwort, die ich suche ("es erlaubt uns, Alias"), aber Aliasing ist auch ohne Standard-Exporte verfügbar: Schreiben Sie einfach 'import {Foo as fooAlias} ...'. Es ist ein bisschen länger, aber das ist letztlich nur ein stilistischer Unterschied ... –

2

oder falsch hier kein Recht da ist. Ich bevorzuge es, eine Sache zu exportieren, so dass Standard für mich die meiste Zeit funktioniert. Sie können auch beide verwenden.

Ich neige dazu, default nicht zu verwenden, wenn ich einen rein funktionalen Ansatz nehme oder einen Satz statischer util-Funktionen schreibe. Wenn mein Modul wirklich nur eine Klasse ist, verwende ich gerne default. Beachten Sie, dass ich noch andere Dinge exportieren kann.

export default class Foo { 
} 

// some util Modul

export function fooHelper() { 
} 
export function bazHelper() { 
} 
Verwandte Themen