Menu
CoddyTech

復習: 型の微調整

CoddyのJavaScriptジャーニー「Introduction To TypeScript」セクションの一部。レッスン 73/73。

challenge icon

チャレンジ

簡単

インデックスシグネチャ、型ガード、および型アサーションを使用して、動的な設定を処理する構成管理システムを作成します。

文字列のキーを string | number | boolean 型の値にマップするインデックスシグネチャを使用する、AppConfig という名前のインターフェースを作成します。

以下の処理を行う validateConfigValue という名前の関数を作成します。

  • AppConfig 型の config と string 型の key の2つのパラメータを受け取ります
  • キーが構成内に存在しない場合は "missing" を返します
  • 型ガードを使用して値の実際の型をチェックします
  • 値が文字列の場合は "string" を返します
  • 値が数値の場合は "number" を返します
  • 値が真偽値の場合は "boolean" を返します
  • 明示的な戻り値の型として string を持ちます

以下の処理を行う getConfigAsString という名前の関数を作成します。

  • AppConfig 型 farm config と string 型の key の2つのパラメータを受け取ります
  • キーが存在しない場合は "undefined" を返します
  • 値が存在する場合は、型アサーションを使用して値を string として扱い、それを返します
  • 明示的な戻り値の型として string を持ちます

以下の処理を行う processConfig という名前の関数を作成します。

  • AppConfig 型の config と string 型の key の2つのパラメータを受け取ります
  • validateConfigValue を使用して型をチェックします
  • 文字列の場合は、大文字に変換された値を返します
  • 数値の場合は、10倍した値を返します
  • 真偽値の場合は、反対の真偽値を返します
  • キーが欠落している場合は null を返します
  • 明示的な戻り値の型として string | number | boolean | null を持ちます

テストデータを作成します:

  • 以下の内容を持つ AppConfig 型の settings を作成します:
    • "appName": "MyApp"
    • "version": 2.1
    • "debugMode": true
    • "maxUsers": 100
    • "theme": "dark"

関数をテストし、以下の出力を表示します:

  • settings と "appName" を指定して validateConfigValue を呼び出します
  • settings と "version" を指定して validateConfigValue を呼び出します
  • settings と "debugMode" を指定して validateConfigValue を呼び出します
  • settings と "timeout" を指定して validateConfigValue を呼び出します
  • settings と "theme" を指定して getConfigAsString を呼び出します
  • settings と "missing" を指定して getConfigAsString を呼び出します
  • settings と "appName" を指定して processConfig を呼び出します
  • settings と "maxUsers" を指定して processConfig を呼び出します
  • settings と "debugMode" を指定して processConfig を呼び出します
  • settings と "invalid" を指定して processConfig を呼び出します

自分で試してみよう

// TODO: ここにコードを書いてください

// AppConfig インターフェースを作成します


// validateConfigValue 関数を作成します


// getConfigAsString 関数を作成します


// processConfig 関数を作成します


// テストデータ(settings オブジェクト)を作成します


// 関数をテストし、結果を出力します
console.log(validateConfigValue(settings, "appName"));
console.log(validateConfigValue(settings, "version"));
console.log(validateConfigValue(settings, "debugMode"));
console.log(validateConfigValue(settings, "timeout"));
console.log(getConfigAsString(settings, "theme"));
console.log(getConfigAsString(settings, "missing"));
console.log(processConfig(settings, "appName"));
console.log(processConfig(settings, "maxUsers"));
console.log(processConfig(settings, "debugMode"));
console.log(processConfig(settings, "invalid"));

Introduction To TypeScriptのすべてのレッスン

自分で練習してみよう: TypeScriptプレイグラウンド