復習: 型の微調整
CoddyのJavaScriptジャーニー「Introduction To TypeScript」セクションの一部。レッスン 73/73。
チャレンジ
簡単インデックスシグネチャ、型ガード、および型アサーションを使用して、動的な設定を処理する構成管理システムを作成します。
文字列のキーを string | number | boolean 型の値にマップするインデックスシグネチャを使用する、AppConfig という名前のインターフェースを作成します。
以下の処理を行う validateConfigValue という名前の関数を作成します。
AppConfig型のconfigとstring型のkeyの2つのパラメータを受け取ります- キーが構成内に存在しない場合は
"missing"を返します - 型ガードを使用して値の実際の型をチェックします
- 値が文字列の場合は
"string"を返します - 値が数値の場合は
"number"を返します - 値が真偽値の場合は
"boolean"を返します - 明示的な戻り値の型として
stringを持ちます
以下の処理を行う getConfigAsString という名前の関数を作成します。
AppConfig型 farmconfigと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のすべてのレッスン
2基本の型
基本の型: str, num, boolean'any' 型: 脱出ハッチ'unknown' 型'null' と 'undef' の扱い型推論の実践明示的な型アノテーションまとめ:基本の型の演習5型:エイリアス、ユニオン型、インターセクション型
プリミティブ型の型エイリアスユニオン型 ('|')ユニオン型の扱い方リテラル型インターセクション型 ('&')型エイリアスの組み合わせまとめ:高度な型の組み合わせ自分で練習してみよう: TypeScriptプレイグラウンド