2015-11-25 10 views
5

Se specifichiamo un export di default:Quando dovrei usare `export default`in JavaScript/TypeScript?

export class Foo {} 
export default Foo; 

allora possiamo omettere le parentesi graffe durante l'importazione (come indicato nella this answer):

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

va bene, ma non v'è alcun motivo per non-stilistica a preferire l'uno sull'altro in casi particolari? Per esempio, c'è qualche convenzione, o uno è incompatibile con certi strumenti, o uno ha un significato diverso?

(Basato su this discussion e altri, la mia comprensione è che export default si sarebbe potuta verificare un modo di gestire l'esportazione di un singolo, oggetto primario (come $), che ora è gestita da import * as foo from "foo". Inoltre, sembra che il valore predefinito la sintassi di importazione non applica la denominazione coerente (import fooAlias from "foo"), mentre l'importazione standard import { fooAlias } from "foo" potrebbe essere un errore di compilazione a meno che l'alias fosse esplicito (Foo as fooAlias). Oltre a ciò, non sono stato in grado di trovare molte informazioni su quando dovrei usarne uno sull'altro.)

+0

Sì, si suppone di utilizzare quando il modulo definisce un solo oggetto (o valore in generale). Si noti che 'import * as $ da" jquery ";' non funziona - si desidera che '$' non sia un oggetto namespace. – Bergi

+0

@Bergi a destra, ma omettere l'esportazione e l'importazione di default tramite 'import {$} da" jquery "' può essere diverso? Quando dovrei usare uno sull'altro? "Default di esportazione" è mai richiesto? –

+0

Un'esportazione predefinita è solitamente il valore più importante, ovvero quello utilizzato più frequentemente. L'esportazione predefinita è solo un'altra esportazione con il nome speciale 'default', quindi' import {default $} da 'jquery'' equivale a 'import $ da' jquery''. –

risposta

0

l'esportazione predefinita può consentire di rinominare il file durante l'importazione in modo ...

foo.js

export default class Foo{ 
    constructor(){ 
    } 
} 

possono essere import Bar from './foo'; in un altro file, questo potrebbe essere utile se si sta utilizzando una libreria e hanno già un Foo classe definita.

è possibile anche esportare un default e di un non predefinito in modo tale che: import Foo, { someVariable, someMethod } from './foo';

+0

Questo sarebbe il tipo di risposta che sto cercando ("ci permette di fare l'alias"), ma l'aliasing è anche disponibile senza esportazioni predefinite: basta scrivere 'import {Foo as fooAlias} ...'. È un po 'più lungo, ma alla fine è solo una differenza stilistica ... –

2

Non c'è giusto o sbagliato qui. Preferisco esportare una cosa quindi il default funziona per me la maggior parte del tempo. Puoi anche usare entrambi.

Tendo a non utilizzare default quando si utilizza un approccio funzionale più puro o si scrive un set di funzioni di utilità statiche.

Quindi quando il mio modulo è davvero solo una classe, mi piace usare default. Si noti che posso ancora esportare altre cose.

export default class Foo { 
} 

// alcuni util modulo

export function fooHelper() { 
} 
export function bazHelper() { 
} 
Problemi correlati