15
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TypeScriptでモジュールのimport/exportやrequire

Posted at

TypeScriptを書いていて、たまにimport出来なかったりして、そしたらrequireしたりとか、モジュールのインポートはふんいきでやっていたんですが、TypeScriptで古いJSのライブラリの型定義を書いていて気持ち悪かったので、調べました。

2つのモジュールインポート方法

CommonJS (Node.js)

インポート方法

  • require

エクスポート方法

  • module.export
  • export

exportとmodule.exportの違い

例えば、require("some-module")とすると、id="some-module"で以下のようなコードが呼ばれる

const module = new Module(id)
(function(export, module) {
  /* モジュール本体のコードがここに差し込まれる */
  return module.export
}(module.export, module)

exportと、module.exportはモジュールが評価される関数への引数で、exportは、module.exportオブジェクトへのポインタ、関数が返しているmodule.exportは、引数で渡されているmoduleexportプロパティなので、モジュール内でexportを上書きすると、exportが元のオブジェクトを指さなくなるので、期待通りに動かない。同じ理由で、moduleを上書きしてしまってもダメ。

ES6

インポート方法

個別
  • import { x } from "module"
  • import * as x from "module"
export defaultされたもの
  • import x from "module"

エクスポート方法

個別
  • export x
なにか1つだけexportしたい場合
  • export default x

TypeScriptとJavaScriptでの違い

ない

どちらを使うか

インポートしたいモジュールが使っているやり方に合わせる。

まとめ

適当にimportやらrequireしていたのを、webpackがきれいにしてくれていたんですね。わかってよかった。

15
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?