.d.ts 宣言ファイル
最終更新:2026-10-22
.d.ts 宣言ファイル
宣言ファイル(.d.ts)は「あるライブラリがどんな形をしているか」を記述するだけで、実装を含みません。これにより TypeScript は純粋な JS ライブラリに型チェックを提供できます。型の供給源は3つあります。ライブラリが同梱しているもの(最善)、コミュニティの @types パッケージ(npm i -D @types/xxx)、自分で手書きするものです。手書きの中核は declare キーワードで、「この値/関数は他で実装されている」と宣言し、コンパイラはそのためのコードを一切生成しません。
| グループ | 設定と実践 |
|---|---|
| 種類 | 設定 |
| strict モード | 不要 |
ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。
📝 構文
// my-lib.d.ts —— 宣言ファイル:型だけを書き、コンパイル後は消える
declare const APP_VERSION: string;
declare function log(msg: string): void;
interface Config {
host: string;
port: number;
debug?: boolean;
}
// コミュニティ型パッケージのインストール:npm i -D @types/lodash
⚙️ パラメータ
| declare const / let | ホスト環境(ライブラリ、CDN のグローバル変数など)が提供する値を宣言します。型はあなたの記述から来ます |
|---|---|
| declare function | すでに実装が存在する関数のシグネチャを宣言します。型だけで関数の本体はありません |
| @types/* | コミュニティが保守する宣言パッケージ(DefinitelyTyped)です。devDependencies に入れるだけで自動的に効き、設定は不要です |
戻り値:戻り値はありません。.d.ts はコンパイル後に JS を一切出力せず、コンパイル時に型の情報をコンパイラへ与えるだけです。
▶ サンプル
下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:
出力:
info app booted
[10:24:00] OK db connected
(トランスパイル後の実行出力。LogOptions の形は .d.ts から提供されています。{ timestamps: "yes" } を渡すと error TS2322 になります)
💡 ポイント
ℹ️ 説明 型の探索の優先順位はこうです。ライブラリの package.json の types フィールドが指す .d.ts が最優先、次に @types パッケージ、最後にプロジェクト内の手書きの宣言です。
💡 ヒント 手書きの宣言では、まず console.log でライブラリを実際に動かし、本当の形を interface として記録しましょう。ドキュメントから型を推測するよりはるかに確実です。確信の持てないフィールドはとりあえず optional にします。
⚠️ 注意 declare で宣言した変数はコンパイル後に対応する JS を持ちません。実行時の値はホストが提供しなければなりません。LOG_LEVEL を宣言しても誰も代入しなければ、実行時には undefined が得られ、TS も警告しません。
🏷️ 関連設定と実践
💡 関連ケース
ケースは今後追加予定です。
📚 関連チュートリアル
❓ よくある質問
Q npm i -D @types/xxx を入れても型が出ないときは?
A まずパッケージ名(@types/ の後に元のパッケージ名)と tsconfig の include の範囲を確認しましょう。DefinitelyTyped に存在しないライブラリなら自分で書きます。.d.ts を1つ作り、declare で使う API を記述し、コンパイルの範囲内に置けばグローバルまたはモジュールごとに効きます。
Q declare const と普通の const の違いは何ですか?
A 普通の const は本物の JS 変数にコンパイルされます。declare const は型レベルの「約束」で、コンパイラに「実行時にはこの名前が存在する」と伝えるだけで、成果物の中には完全に存在しません。だから declare 文には初期化値を付けられません。
Q declare module "xxx" は何のためのものですか?
A 環境モジュール宣言です。npm パッケージや TS 以外のリソースに型を補います。典型的な使い方は2つです。型のないサードパーティパッケージに declare module "pkg" { ... } を書くこと。そして declare module "*.css" でスタイルの import が「モジュールが見つからない」エラーを出さないようにすることです。