export default
でインポートすることができる以外に、これら2つの間に大きな違いがあるかどうかを判断しようとしています。
import myItem from 'myItem';
そしてexport const
を使って私はできる:
import { myItem } from 'myItem';
これ以外の違いやユースケースがあるかどうか私は思っています。
これは名前付きエクスポートとデフォルトのエクスポートです。 export const
は、const宣言または複数の宣言をエクスポートする名前付きエクスポートです。
強調するために:ここで重要なことは export
キーワードです--- const
はconst宣言を宣言するのに使われます。 export
は、クラス宣言や関数宣言などの他の宣言にも適用できます。
デフォルトのエクスポート(export default
)
ファイルごとにデフォルトのエクスポートを1つ指定できます。インポートするときは、名前を指定してインポートする必要があります。
import MyDefaultExport from "./MyFileWithADefaultExport";
あなたはこれに好きな名前を付けることができます。
名前付きエクスポート(export
)
名前付きエクスポートでは、ファイルごとに複数の名前付きエクスポートを作成できます。次に、必要な特定のエクスポートを中括弧で囲んでインポートします。
// ex. importing multiple exports:
import { MyClass, MyOtherClass } from "./MyClass";
// ex. giving a named import a different name by using "as":
import { MyClass2 as MyClass2Alias } from "./MyClass2";
// use MyClass, MyOtherClass, and MyClass2Alias here
あるいは、同じステートメント内で名前付きインポートとともにデフォルトを使用することも可能です。
import MyDefaultExport, { MyClass, MyOtherClass} from "./MyClass";
ネームスペースのインポート
オブジェクト上のファイルからすべてをインポートすることも可能です。
import * as MyClasses from "./MyClass";
// use MyClasses.MyClass, MyClasses.MyOtherClass and MyClasses.default here
注意事項
デフォルトのエクスポートは実際にはdefault
という名前の名前付きエクスポートなので、名前付きインポートでインポートできます。
import { default as MyDefaultExport } from "./MyFileWithADefaultExport";
export default
は、 インポート構文 モジュールのインポート時に使用されるべき方法に影響します。
私が好む(そして使う)便利なユースケースは、 明示的に 名前を付けなくても anonymous 関数をエクスポートすることを可能にすることです。名:
export function divide( x ){
return x / 2;
}
// only one 'default' function may be exported and the rest (above) must be named
export default function( x ){ // <---- declared as a default function
return x * x;
}
// The default function should be the first to import (and named whatever)
import square, {divide} from './module_1.js'; // I named the default "square"
console.log( square(2), divide(2) ); // 4, 1
{}
構文を使って関数(または変数)をインポートする場合、インポートされるものはすべてエクスポート時に すでに という名前であるため、 正確に 同じ名前でインポートする必要があります。インポートは機能しませんでした。
デフォルトの関数は最初にインポートする必要があります
import {divide}, square from './module_1.js
divide_1
はmodule_1.js
にエクスポートされなかったため、何もインポートされません
import {divide_1} from './module_1.js
square
はmodule_1.js
にエクスポートされませんでした。これは、{}
が named エクスポートのみを明示的に検索するようにエンジンに指示するためです。
import {square} from './module_1.js
注意事項:デフォルトのエクスポートからインポートする場合、命名は完全に独立していることに注意してください。これは実際にはリファクタリングに影響を与えます。
対応するインポートを持つ、このようなクラスFoo
があるとしましょう。
export default class Foo { }
//the name 'Foo' could be anything, since it's just an
//identifier for the default export
import Foo from './Foo'
Foo
クラスをBar
にリファクタリングし、ファイルの名前を変更しても、ほとんどのIDEはインポートに影響しません。だからあなたはこれで終わるでしょう:
export default class Bar { }
//the name 'Foo' could be anything, since it's just an
//identifier for the default export.
import Foo from './Bar'
特にTypeScriptでは、名前付きエクスポートとより信頼性の高いリファクタリングを本当に感謝しています。違いは、default
キーワードと中括弧がないことです。あなたが今タイプチェックをしているので、これもまたあなたがあなたのインポートでタイプミスをするのを防ぎます。
export class Foo { }
//'Foo' needs to be the class name. The import will be refactored
//in case of a rename!
import { Foo } from './Foo'
から ドキュメント :
名前付きエクスポートは、複数の値をエクスポートするのに役立ちます。インポート中に、対応する値を参照するために同じ名前を使用することができます。
デフォルトのエクスポートに関しては、モジュールごとにデフォルトのエクスポートは1つだけです。デフォルトのエクスポートは、関数、クラス、オブジェクト、またはその他のものです。この値は、インポートするのが最も簡単なので、「メイン」エクスポート値と見なされます。
ブラウザがes6を使用していないという問題がありました。
私はそれを修正しました:
<script type="module" src="index.js"></script>
TypeモジュールはブラウザにES6を使うように伝えます。
export const bla = [1,2,3];
import {bla} from './example.js';
それでうまくいきます。
あなたがデフォルトを置くとき、それはデフォルトのエクスポートと呼ばれます。ファイルごとにデフォルトのエクスポートを1つだけ持つことができ、任意の名前の別のファイルにインポートすることができます。 defaultという名前のexportを付けない場合は、中かっこを付けて同じ名前で別のファイルにインポートする必要があります。