Estou tentando determinar se há grandes diferenças entre esses dois, além de poder importar export default
apenas fazendo:
import myItem from 'myItem';
E usando export const
eu posso fazer:
import { myItem } from 'myItem';
Gostaria de saber se existem diferenças e / ou casos de uso além deste.
javascript
ecmascript-6
es6-modules
ajmajmajma
fonte
fonte
const
fará com que o identificador seja somente leitura. Portanto, no caso de valores primitivos, você pode considerar isso imutável. Observe que o valor em si não é imutável; portanto, objetos, matrizes etc. podem ser alterados - apenas não são reatribuídos.const
.Respostas:
É uma exportação nomeada versus uma exportação padrão.
export const
é uma exportação nomeada que exporta uma declaração ou declarações const.Para enfatizar: o que importa aqui é a
export
palavra - chaveconst
usada para declarar uma declaração ou declarações const.export
também pode ser aplicado a outras declarações, como declarações de classe ou função.Exportação padrão (
export default
)Você pode ter uma exportação padrão por arquivo. Ao importar, você deve especificar um nome e importar da seguinte maneira:
Você pode dar a esse nome qualquer nome que desejar.
Exportação nomeada (
export
)Com exportações nomeadas, você pode ter várias exportações nomeadas por arquivo. Importe as exportações específicas que você deseja colocar entre chaves:
Ou é possível usar um padrão junto com importações nomeadas na mesma instrução:
Importação de namespace
Também é possível importar tudo do arquivo em um objeto:
Notas
Uma exportação padrão é na verdade uma exportação nomeada com o nome
default
para que você possa importá-la com uma importação nomeada:fonte
export default
afeta a sintaxe ao importar a "coisa" exportada, ao permitir importar, o que foi exportado, escolhendo o nome noimport
si, independentemente do nome em que foi exportado, simplesmente porque está marcado como "padrão".Um caso de uso útil, que eu gosto (e uso), está permitindo exportar uma função anônima sem precisar explicitamente nomeá-la, e somente quando essa função é importada, deve ser dado um nome:
Exemplo:
Exportar 2 funções, uma é
default
:Importe as funções acima. Criando um nome para
default
esse:Quando a
{}
sintaxe é usada para importar uma função (ou variável), isso significa que tudo o que é importado foi já nomeado quando exportados, por isso é preciso importá-lo pelo exato mesmo nome, ou então a importação não iria funcionar.Exemplos errôneos:
A função padrão deve ser a primeira a importar
divide_1
não foi exportadomodule_1.js
, portanto nada será importadosquare
não foi exportadomodule_1.js
, porque{}
diz ao mecanismo para procurar explicitamente apenas exportações nomeadas .fonte
import something from
vez deimport { somethingNamed } from
.Nota secundária: considere que quando você importa de uma exportação padrão, a nomeação é completamente independente. Isso realmente afeta as refatorações.
Digamos que você tenha uma classe
Foo
como esta com uma importação correspondente:Agora, se você refatorar sua
Foo
classeBar
e também renomear o arquivo, a maioria dos IDEs NÃO afetará sua importação. Então você vai acabar com isso:Especialmente no Typescript, eu realmente aprecio as exportações nomeadas e a refatoração mais confiável. A diferença é apenas a falta da
default
palavra - chave e das chaves. Essa btw também impede que você digite erros de digitação na importação, pois você tem a verificação de tipo agora.fonte
import { Foo as Anything } from …
quantoimport Anything from …
nas exportações padrão.as
não é realmente o ponto desse comentário de origem. Obrigado pelo voto negativo; pexport default
para exportar o objeto principal de um projeto, em particular de um pacote npm (ele substitui amodule.exports =
). Porém, internamente em um projeto, é melhor usar apenas exportações nomeadas.A partir da documentação :
fonte
Quando você coloca o padrão, é chamado de exportação padrão. Você pode ter apenas uma exportação padrão por arquivo e pode importá-lo para outro arquivo com o nome que desejar. Quando você não coloca o padrão, chamado export export, você deve importá-lo para outro arquivo usando o mesmo nome com chaves dentro dele.
fonte
Eu tive o problema de o navegador não usar es6.
Eu corrigi-lo com:
O módulo type informa ao navegador para usar o ES6.
Então deve funcionar.
fonte