0Pricing
TypeScript Academy · レッスン

構造化された文字列のモデル化

イベント名やルートパスなどの形式を強制します。

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

文字列形式を強制する

実際のアプリケーションで使われる多くの文字列には、イベントハンドラー名、APIルートパス、CSS変数のように一定の構造があります。テンプレートリテラル型を使うと、これらの形式をモデル化してコンパイラーに強制させられます。

イベントハンドラー名をモデル化する

ハンドラー名は、多くの場合onと大文字で始まるイベント名を組み合わせた形になります。テンプレート内で組み込みのCapitalizeヘルパーを使うと、イベント'click'をハンドラー名'onClick'に対応付けられます。

type Event = "click" | "focus"
// template: on followed by Capitalize of Event
// => "onClick" | "onFocus"
const h: "onClick" | "onFocus" = "onClick"
console.log(h)

ここでCapitalizeが重要な理由

Capitalizeがなければ、テンプレートの結果は'onclick'になります。この組み込み型はリテラルの先頭文字を大文字にし、慣用的なcamelCaseのハンドラー名を生成します。

type E = "scroll"
type Cap = Capitalize<E> // "Scroll"
const c: "Scroll" = "Scroll"
console.log(c)

ハンドラーマップを生成する

テンプレートリテラルのキーとマップ型を組み合わせると、ハンドラーのオブジェクト型を生成できます。イベントごとに型付けされた関数が1つずつ用意され、名前の大文字・小文字も正しくなります。

type Events = "click" | "hover"
type Handlers = {
  [E in Events as "on" extends string ? "on" : never]?: () => void
}
// In practice the key uses a template: on + Capitalize<E>
const h: { onClick?: () => void } = {}
console.log(h)

ルートパスをモデル化する

APIルートには、先頭のスラッシュ、リソース、IDセグメントという共通の形があります。固定テキストとプレースホルダーを組み合わせたテンプレートで、有効なパスを表現できます。

type Resource = "users" | "posts"
// template: /api/ followed by Resource
// => "/api/users" | "/api/posts"
const path: "/api/users" | "/api/posts" = "/api/users"
console.log(path)

パラメーター化されたパス

動的なID用のプレースホルダーを追加します。スラッシュ、リソース、スラッシュ、そしてジェネリックなIDセグメントを並べたテンプレートで、ユーザーパスに数値IDが続くようなパスをモデル化できます。

type Id = number
// template: /users/ followed by Id-like segment
function userPath(id: number): string {
  return "/users/" + id
}
console.log(userPath(42)) // /users/42

コンパイル時に形式を強制する

パラメーターをテンプレートリテラル型として型付けすると、その構造に適合しない文字列を拒否できます。これにより、不正なルートやキーを防ぐガードになります。

type Method = "GET" | "POST"
function call(endpoint: "GET /users" | "POST /users") {
  return endpoint
}
console.log(call("GET /users"))
// call("DELETE /users") // Error
console.log("ok")

CSS変数名を組み立てる

CSSカスタムプロパティには命名規則があります。先頭に2つのハイフンを置き、トークン用のプレースホルダーを続けるテンプレートで、色トークンの変数のような名前をモデル化できます。

type Token = "primary" | "accent"
// template: --color- followed by Token
// => "--color-primary" | "--color-accent"
const v: "--color-primary" | "--color-accent" = "--color-accent"
console.log(v)

推論を使って分割する

テンプレートリテラル型は解析にも使えます。条件型とinferを組み合わせると、型レベルで構造化された文字列の一部を抽出できます。たとえば、エンドポイント文字列からメソッドを取り出せます。

type ExtractMethod<S> = S extends "GET /users" ? "GET" : "OTHER"
type M = ExtractMethod<"GET /users"> // "GET"
const m: "GET" = "GET"
console.log(m)

実務での効果

構造化された文字列の型は、さまざまなバグの原因をまとめて検出します。スペルを間違えたハンドラー名、未知のルート、誤ったCSSトークンなどが、気付かれない実行時エラーではなくコンパイルエラーになります。

type Tab = "home" | "profile"
// template: tab- followed by Tab => "tab-home" | "tab-profile"
function selectTab(id: "tab-home" | "tab-profile") { return id }
console.log(selectTab("tab-home"))

読みやすさを保つ

強力である一方、深くネストしたテンプレート型は読みやすさを損ないます。中間的な型エイリアスに名前を付け、次に読む人にも構造がわかるようにしてください。

type Entity = "user" | "order"
// type EventName = on + Capitalize<Entity> + Created
// e.g. "onUserCreated" | "onOrderCreated"
const e: "onUserCreated" | "onOrderCreated" = "onUserCreated"
console.log(e)

理解度チェック

構造化された文字列のモデル化についての理解度を確認しましょう。

まとめ

テンプレートリテラル型は、ハンドラー名(イベントにonとCapitalizeを組み合わせたもの)、ルートパス、CSS変数などの構造化された文字列をモデル化し、コンパイル時に形式を強制します。マップ型と組み合わせるとハンドラーマップを生成でき、条件型とinferを組み合わせると文字列を解析できます。複雑なパターンを読みやすく保つため、中間的な型エイリアスに名前を付けてください。

よくある質問

「構造化された文字列のモデル化」レッスンは無料ですか?

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

「構造化された文字列のモデル化」で何を学びますか?

イベント名やルートパスなどの形式を強制します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「構造化された文字列のモデル化」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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