#17 TypeScriptで学ぶモジュールとパッケージの基本
TypeScriptのモジュールは、JavaScriptと同じexport・importの仕組みをそのまま使います。この記事では、TypeScriptにおけるモジュールの基本を、つまずきやすいポイントも含めて解説します。
exportとimportの基本
// utils.ts
export function greet(name: string): void {
console.log(`こんにちは、${name}さん`);
}
// main.ts
import { greet } from './utils';
greet("太郎");
このように名前を指定してエクスポートする書き方を「名前付きエクスポート(named export)」と呼びます。1つのファイルから複数の関数・変数をエクスポートしたい場合に向いています。
デフォルトエクスポート
1ファイルにつき1つだけ、主役となる値をエクスポートしたい場合はexport defaultが使えます。
// greeter.ts
export default function greet(name: string): void {
console.log(`こんにちは、${name}さん`);
}
// main.ts
import greet from './greeter'; // 波括弧不要、好きな名前を付けられる
名前付きエクスポートと違い、インポート時に波括弧{}が不要で、好きな名前を付けられるのが特徴です。ただし、どちらの方式を使うかチーム・プロジェクトで統一しておかないと、ファイルによって書き方がバラバラになりがちなので注意しましょう。
型だけをエクスポートする
TypeScriptには、型定義だけを他のファイルと共有するexport typeという書き方もあります。
export type Person = { name: string; age: number };
インポート側でも、型であることを明示するimport typeという書き方があります。
import type { Person } from './types';
import typeを使うと、コンパイル後のJavaScriptからそのimport文が完全に消えるため、実行時に不要なコードを増やさずに済みます。型のみを使う場合は積極的に使うとよいでしょう。
まとめてエクスポートする「バレルファイル」
複数のファイルに分かれたモジュールをまとめて1箇所からインポートできるようにするindex.tsを用意するテクニックがあり、「バレルファイル」と呼ばれます。
// index.ts
export * from './utils';
export * from './greeter';
// main.ts
import { greet } from './index'; // まとめて1箇所からインポートできる
インポート文がスッキリする一方、ファイルが増えすぎると管理が煩雑になることもあるため、プロジェクトの規模に応じて使うかどうかを判断するとよいでしょう。
TypeScriptならではの注意点
複数のファイルに分かれたプロジェクトでは、型の定義を専用のファイルにまとめておくと、プロジェクト全体で同じ型を安心して使い回せます。ファイルを分ける際は、機能だけでなく型の置き場所も意識しておくとよいでしょう。また、モジュール同士が互いを`import`し合う「循環参照」は、実行時に想定外の`undefined`を生む原因になりやすいため、依存関係が一方通行になるようファイル構成を意識すると安心です。
まとめ
TypeScriptのモジュールはJavaScriptと同じexport・importが基本です。名前付き/デフォルトエクスポートの使い分け、型専用のexport type/import type、バレルファイルによる整理も活用し、プロジェクト全体で見通しよくモジュールを共有しましょう。
本ページはプロモーションを含みます。
参考書籍(PR)
TypeScriptをもっと学びたい方には「プロを目指す人のためのTypeScript入門」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿