0Pricing
TypeScript Academy · レッスン

テンプレートリテラル型の基礎

ユニオンとプレースホルダーから文字列型を構築します。

「テンプレートリテラル型の基礎」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

型レベルの文字列

テンプレートリテラル型は、ほかの文字列型を組み合わせて新しい文字列リテラル型を作ります。実行時のテンプレート文字列と同じバッククォートとプレースホルダーの構文を使いますが、処理は型だけを対象に行われます。

単純なテンプレートリテラル型

Name型のプレースホルダーに続いてHello, というテキストを含むテンプレートリテラルとして、Greetingという型エイリアスが定義されているとします。Nameがリテラル'Ada'なら、Greetingはリテラル型'Hello, Ada'になります。

type Name = "Ada"
// type Greeting = template literal: Hello, then Name
// Greeting is the string literal type "Hello, Ada"
const g: "Hello, Ada" = "Hello, Ada"
console.log(g)

プレースホルダーにはほかの型を埋め込める

プレースホルダーには、リテラル型、型パラメーター、ユニオン型など、文字列に近い任意の型を指定できます。TypeScriptはそれを周囲のテキストに置き換えて、新しいリテラル型を作ります。

type World = "World"
// A template literal type with text Hello,  and placeholder World
// yields the literal "Hello, World"
const hw: "Hello, World" = "Hello, World"
console.log(hw)

ユニオン型の組み合わせでバリエーションが増える

プレースホルダーがユニオン型の場合、テンプレートはすべてのメンバーに展開されます。'a' | 'b'と固定のサフィックスを組み合わせるテンプレートは、それぞれの組み合わせによるユニオン型を生成します。

type Side = "left" | "right"
// template: Side followed by -margin
// expands to "left-margin" | "right-margin"
const m: "left-margin" | "right-margin" = "left-margin"
console.log(m)

複数のプレースホルダーを組み合わせる

2つのユニオン型プレースホルダーは直積を形成します。'sm' | 'lg'というサイズと'red' | 'blue'という色を区切り文字で組み合わせると、4つのリテラル型になります。

type Size = "sm" | "lg"
type Color = "red" | "blue"
// template Size-Color expands to 4 combinations
const c: "sm-red" | "sm-blue" | "lg-red" | "lg-blue" = "lg-blue"
console.log(c)

これが役立つ理由

テンプレートリテラル型を使うと、CSSクラス名、イベント名、ルートパスなど、一定の規則に従う文字列の集合を正確に表現できます。そのため、コンパイラーが実行前に不正な文字列を拒否できます。

type Prefix = "btn"
type Variant = "primary" | "ghost"
// template Prefix--Variant => "btn--primary" | "btn--ghost"
const cls: "btn--primary" | "btn--ghost" = "btn--primary"
console.log(cls)

数値と真偽値は文字列に変換される

テンプレートリテラル型に置かれた文字列以外の型は、文字列形式に変換されます。数値リテラル42は、結果の文字列型の中でテキスト42になります。

type Id = 42
// template id- followed by Id => "id-42"
const x: "id-42" = "id-42"
console.log(x)

ジェネリックなプレースホルダーを使う

ジェネリック関数は、引数のリテラル型からテンプレートリテラルの戻り値の型を構築できます。そのため、各呼び出し箇所で正確な文字列がわかります。

function prefixed<T extends string>(s: T) {
  return ("app-" + s) as "app-" extends string ? string : never
}
console.log(prefixed("home")) // app-home

入力を制約する

値がテンプレートリテラル型に一致するよう要求できます。記述したパターンに適合する文字列だけが受け入れられるため、コンパイル時にタイプミスを検出できます。

type Pixel = "left" | "right"
function setSide(s: Pixel) { return s }
console.log(setSide("left"))
// setSide("top") // Error: not assignable

ワイドなstring型ではパターンが失われる

プレースホルダーがリテラル型ではなくワイドなstring型の場合、テンプレート全体がstringに縮退します。具体性を保つにはリテラル型の入力が必要で、多くの場合はas constを使います。

const dynamic: string = "anything"
// a template using dynamic yields just string, not a precise literal
const result: string = "prefix-" + dynamic
console.log(result)

使用する場面

テンプレートリテラル型は、CSSユーティリティクラス、接頭辞付き識別子、クエリーキー、イベント名など、文字列が一定の構造に従う場面に適しています。文字列の規約を、コンパイラーが検証する契約に変えられます。

type Theme = "light" | "dark"
// template theme- followed by Theme => "theme-light" | "theme-dark"
const t: "theme-light" | "theme-dark" = "theme-dark"
console.log(t)

理解度チェック

テンプレートリテラル型の基本についての理解度を確認しましょう。

まとめ

テンプレートリテラル型は、プレースホルダーを周囲のテキストに置き換えて文字列リテラル型を作ります。ユニオン型のプレースホルダーはすべての組み合わせに展開され、複数のユニオン型は直積を形成します。文字列以外のリテラル型はテキスト形式に変換されます。ワイドなstring型のプレースホルダーを使うと結果はstringに縮退するため、正確な型にはリテラル型の入力(多くの場合as constを使用)が必要です。これにより、文字列の規約をコンパイラーで検証できます。

よくある質問

「テンプレートリテラル型の基礎」レッスンは無料ですか?

はい。「テンプレートリテラル型の基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「テンプレートリテラル型の基礎」で何を学びますか?

ユニオンとプレースホルダーから文字列型を構築します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「テンプレートリテラル型の基礎」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. テンプレートリテラル型の基礎
  2. 構造化された文字列のモデル化
  3. 文字列ユニオンとオートコンプリート
  4. 組み込みの文字列操作型
← TypeScript Academyに戻る