TypeScript を使って Node.js のアプリを開発していると、だんだんモジュールの数が増えていき、export, import 文が長くなったり冗長な感じになったりします。また、プロジェクト全体の共通機能をまとめてモジュール化する仕組みを考えたりと、モジュールの構成をどうするかについては常々悩ましいところがあります。
この記事では、モジュール構成のリファクタリングに使えるre-exports
とそれを import する方法について紹介します。元々は ES Modules の仕様なので、Interface など TypeScript の機能を除き JS でも同じく使える仕組みになります。
※ただし、ES Modules の構文(JS)をそのまま Node.js 上で実行する場合は mjs 拡張子の使用・実験フラグ付きの起動が必要になり、詳細については割愛させていただきます。
export
例えば、以下データモデルの Class または Interface を定義して models ディレクトリ以下に配置します。
index.ts を作成、それらをまとめて export しておきます。
- models/index.ts
1
2
3
4
5export * from './User' // User.ts
export * from './Book' // Book.ts
export * from './Contact' // Contact.ts
// default は使えないので注意
import
必要なモジュールを以下のように適宜 importします。
1モジュールのみ import
1
import { User } from './models'
複数のモジュールを import
1
2
3
4import { User, Book } from './models'
const user: User = { id: 'user_id' }
const book: Book = { id: 'book_id' }別名をつけてまとめて import
1
2
3
4
5import * as Model from './models'
const user: Model.User = { id: 'user_id' }
const book: Model.Book = { id: 'book_id' }
const contact: Model.Contact = { id: 'contact_id' }
公式ドキュメント
公式ドキュメントでこの内容を確認したい場合は、下記をご参考ください。
まとめ
export * from '{PATH}'
でまとめて export 、必要に応じて適宜 import することができます。
アプリロジックの機能またはレイヤーごとにモジュールをまとめたり、プロジェクト共通の Util クラスをまとめて外部モジュール化したりと、色んな場面で利用できると思いますので、一度試してみてはいかがでしょうか。
最後まで読んでいただきありがとうございました。