TypeScriptを使っていて、型定義ファイルの扱いをどのような構成にするか悩む場面があるかと思います。
今回は、そのような場面で役立つindex.ts(バレル)を使用した整理方法を説明します。
ディレクトリ構成の参考
まずは、ディレクトリ構成に関して簡単に記載します。
structures
配下に、index.ts及び2つの型定義ファイルを配置しています。
- structures ...型定義ファイルを配置するディレクトリ
- index.ts ... 一括exportを行うファイル
- ICompany.ts ... 型定義ファイル1
- IUser.ts ... 型定義ファイル2
export
export側から順を追って説明します。
index.ts
exportしたい定義ファイルを、*(ワイルドカード)を使用してexportします。
このようにすることで、定義ファイルでexportされている全ての型をexportすることができます。
export * from './ICompany';
export * from './IUser';
型定義ファイル
あくまでも参考ですが、以下2ファイルを例として記載します。
ICompany.ts
// ICompany.ts
export interface ICompany {
id: number;
no: number;
name: string;
}
IUser.ts
// IUser.ts
interface IUserTeam {
id: number;
no: number;
name: string;
}
export interface IUser {
id: number;
no: number;
name: string;
team: IUserTeam;
}
import
structures
をimportするだけで、2つのファイルの型定義を使用できます。
各ファイル毎にimportする必要がなくなるので、型定義のファイル数が増えるほど便利になりますね。
import { IUser, ICompany } from '~/structures';
なお、当然のことではありますがexportされていないIUserTeam
はimportできません。
補足ポイント
同名の型定義が存在する場合、エラーになる
先程のIUser.ts
に、ICompany
を定義します。
// IUser.ts
interface IUserTeam {
id: number;
no: number;
name: string;
}
export interface IUser {
id: number;
no: number;
name: string;
team: IUserTeam;
}
/** 追加 */
export interface ICompany {
id: number;
no: number;
name: string;
}
以下のように、既にICompany
がexportされている旨のエラーが表示されます。
エラーが表示されるのですぐに気付くことはできますが、同名の定義を作成しないように注意する必要があります。
まとめ
index.tsを配置して型定義ファイルを整理する方法に関して説明しました。
1つのファイルに全ての型定義をすれば良いという考え方もあるかもしれませんが、プロジェクトが拡大すると定義が増えすぎて整理が大変になると思います。
予めindex.tsを使用した方法を使うと、後々の整理の手間を削減できて良いと思います。
コメント