[TypeScript小テクニック]プロパティ名にパターンがあるときの型定義
問題
Coincheck(仮想通貨取引所)の残高取得APIは、次の値を返してきます。この型を定義するとき、あなたならどうしますか?
{
"success": true,
"jpy": "0.8401",
"btc": "7.75052654",
"jpy_reserved": "3000.0",
"btc_reserved": "3.5002",
"jpy_lend_in_use": "0",
"btc_lend_in_use": "0.3",
"jpy_lent": "0",
"btc_lent": "1.2",
"jpy_debt": "0",
"btc_debt": "0"
}
※上記のサンプルはAPIドキュメントから引っ張ってきましたが、実際にリクエストしてみると"jpy","btc"以外に20種類ほどの通貨が同様に並びます。
私の回答
Template Literal Typesを使いましょう!オブジェクトのキーが特定の組み合わせで数が多い時には便利ですね。
type Currency = 'btc' | 'jpy' // | 'eth' | 'etc' | ...以下省略。
type SuccessResponseKey = `${Currency}${'' | '_reserved' | '_lent_in_use' | '_lent' | '_debt'}`;
type SuccessResponse = { success: true } & { [key in SuccessResponseKey]: string };
記事紹介
ここまで読んでいただき、ありがとうございます。
最近、毎週投稿を初めて何とか続いているので、もしよければ他の記事も見て頂けると嬉しいです。
TypeScriptが好きなので、それ関連の投稿をしてます。