まとめ:高度な型の組み合わせ
CoddyのJavaScriptジャーニー「Introduction To TypeScript」セクションの一部。レッスン 36/73。
チャレンジ
簡単statusプロパティがリテラル型"success"で、dataプロパティがany型であるオブジェクトの型エイリアスSuccessを作成してください。
statusプロパティがリテラル型"error"で、messageプロパティがstring型であるオブジェクトの型エイリアスFailureを作成してください。
Success型とFailure型のユニオン型である型エイリアスResultを作成してください。
Result型のresultという名前のパラメータを受け取り、stringを返すprocessResultという名前の関数を作成してください。この関数は、statusプロパティに対して型ガードを使用して結果の型を判定し、以下のように動作する必要があります。
- statusが
"success"の場合、"Operation successful: [data]"を返します。 - statusが
"error"の場合、"Operation failed: [message]"を返します。
Result型のresponseという名前のパラメータを受け取り、booleanを返すhandleApiResponseという名前の別の関数を作成してください。この関数は、操作が成功した場合はtrueを、失敗した場合はfalseを返す必要があります。
以下の入力が提供されます:
- 1番目の入力:
{"status": "success", "data": "User created"}のような成功結果、または{"status": "error", "message": "Invalid credentials"}のような失敗結果を表すJSON文字列。 - 2番目の入力:同じ形式の別のJSON文字列。
両方のJSON入力をResultオブジェクトとしてパースし、以下の処理を行ってください:
- 1番目にパースされた結果で
processResultを呼び出し、返された文字列を出力します。 - 1番目にパースされた結果で
handleApiResponseを呼び出し、返された真偽値を出力します。 - 2番目にパースされた結果で
processResultを呼び出し、返された文字列を出力します。 - 2番目にパースされた結果で
handleApiResponseを呼び出し、返された真偽値を出力します。
自分で試してみよう
import * as readline from 'readline';
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const input: string[] = [];
// TODO: ここにコードを書いてください
// 1. Success、Failure、および Result の型エイリアスを作成します
// 2. processResult 関数を作成します
// 3. handleApiResponse 関数を作成します
rl.on('line', (line: string) => {
input.push(line.trim());
if (input.length === 2) {
// JSON 入力をパースします
const result1 = JSON.parse(input[0]);
const result2 = JSON.parse(input[1]);
// 4. パースされた結果を使用して関数を呼び出し、出力を表示します
rl.close();
}
});Introduction To TypeScriptのすべてのレッスン
2基本の型
基本の型: str, num, boolean'any' 型: 脱出ハッチ'unknown' 型'null' と 'undef' の扱い型推論の実践明示的な型アノテーションまとめ:基本の型の演習5型:エイリアス、ユニオン型、インターセクション型
プリミティブ型の型エイリアスユニオン型 ('|')ユニオン型の扱い方リテラル型インターセクション型 ('&')型エイリアスの組み合わせまとめ:高度な型の組み合わせ自分で練習してみよう: JavaScriptオンラインコンパイラ