0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[TypeScript小テクニック]プロパティ名にパターンがあるときの型定義 - Template Literal Types

Posted at

[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が好きなので、それ関連の投稿をしてます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?