.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 が「モジュールが見つからない」エラーを出さないようにすることです。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%