`${T}` テンプレートリテラル型

最終更新:2026-10-22

`${T}` テンプレートリテラル型

テンプレートリテラル型は型レベルで文字列連結を行います。`${A}-${B}` は A、B のすべてのリテラルの組み合わせを列挙します。イベント名、ルート、CSS クラス名のような「接頭辞+接尾辞」式の文字列の約束ごとに適しています。

グループ型の組み合わせ
種類型
strict モード不要

ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。

📝 構文

type Lang = "zh" | "en";
type Page = "home" | "about";
type Route = `/${Lang}/${Page}`; // 4 通りの組み合わせの共用体

⚙️ パラメータ

`${T}`プレースホルダにはリテラルユニオン型を置きます。ユニオンのメンバーはデカルト積に展開されます
Uppercase/Lowercase組み込みの文字変換ユーティリティ型で、テンプレートリテラルと同じ仕組みです

戻り値:すべての文字列の組み合わせからなるユニオン型です。純粋にコンパイル時の産物であり、実行時には存在しません。

▶ サンプル

下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:

出力:

user:created | order:deleted

(トランスパイル後の実行出力。"user:updated" を配列に入れるとコンパイルエラーになります。4 通りの組み合わせの中に含まれていないからです)

💡 ポイント

ℹ️ 説明 プレースホルダはリテラル型でなければなりません(string | number も可能ですが、ユニオンの展開はリテラルユニオンでのみ発生します)。組み合わせの数は各ユニオンのサイズの積です。
💡 ヒント 条件型の infer と組み合わせると、文字列型から断片を「抽出」できます。type OnEvent<T> = T extends `on${infer E}` ? E : never のようにです。
⚠️ 注意 ユニオンのメンバーが多くなると組み合わせの数は爆発し(10×10 なら 100 分岐)、コンパイルも遅くなります。ユニオンのサイズを制御するか、string に切り替えましょう。
ケースは今後追加予定です。

📚 関連チュートリアル

❓ よくある質問

Q テンプレートリテラル型は実行時に存在しますか?
A 存在しません。純粋にコンパイル時の型演算で、トランスパイル後に消えます。実行時には普通の文字列値しかありません。
Q 文字列型から一部分を抽出するには?
A 条件型+ infer を使います。type Event<T> = T extends `on${infer Name}` ? Name : never のように、onCreated を created に絞り込めます。詳細は infer-keyword の項目を参照してください。
Q Uppercase<T> のような組み込み型もテンプレートリテラル型ですか?
A はい。Uppercase/Lowercase/Capitalize/Uncapitalize は同じ仕組みで文字を変換し、独自のテンプレートリテラル型と自由に組み合わせられます。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%