TypeScript で複数のモジュールをまとめて export, import する

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
    5
    export * 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
    4
    import { User, Book } from './models'

    const user: User = { id: 'user_id' }
    const book: Book = { id: 'book_id' }

  • 別名をつけてまとめて import

    1
    2
    3
    4
    5
    import * 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 クラスをまとめて外部モジュール化したりと、色んな場面で利用できると思いますので、一度試してみてはいかがでしょうか。

最後まで読んでいただきありがとうございました。