LoginSignup
0
0

[TypeScript]Record型

Posted at

はじめに

今回はRecord型の使い方や、どのような場面で使用できるかについて書いていきます。

サンプルコード

以下がサンプルコードになります。

type Prefectures = "Tokyo" | "Chiba" | "Saitama" | "Shiga";

type Covid19InfectionInfo = {
  kanji_name: string;
  confirmed_cased: number;
  large: string;
};

const Covid19Japan: Record<Prefectures, Covid19InfectionInfo> = {
  Tokyo: { kanji_name: "東京", confirmed_cased: 1900, large: "260km" },
  Chiba: { kanji_name: "千葉", confirmed_cased: 200, large: "230km" },
  Saitama: { kanji_name: "埼玉", confirmed_cased: 500, large: "200km" },
  // エラー↓
  Shiga: { kanji_name: "滋賀", confirmed_cased: 70},
  //  エラー Gunma: { kanji_name: "滋賀", confirmed_cased: 70, large: "300km" },
};

console.log(Covid19Japan);
// 出力↓
// {
//     Tokyo: { kanji_name: '東京', confirmed_cased: 1900, large: '2000km' },
//     Chiba: { kanji_name: '千葉', confirmed_cased: 200, large: '2000km' },
//     Saitama: { kanji_name: '埼玉', confirmed_cased: 500, large: '2000km' }
// }

Record型を使う場面

オブジェクトのマッピング

Record型は、特定の型のキーに対して特定の型の値をマッピングする場合に便利です。例えば、文字列をキーとして特定の型のオブジェクトをマッピングする場合に使用できます。

// ユーザーの名前をIDにマッピングする例
type UserID = string;
type User = { name: string };

const users: Record<UserID, User> = {
    'user1': { name: 'Alice' },
    'user2': { name: 'Bob' },
    // 他のユーザー
};

オブジェクトの形状を制限する

特定の形状を持つオブジェクトのセットを表現するために、Record型を使用することができます。

// オブジェクトの形状を制限する例
type Car = {
    make: string;
    model: string;
    year: number;
};

const cars: Record<string, Car> = {
    'car1': { make: 'Toyota', model: 'Camry', year: 2020 },
    'car2': { make: 'Honda', model: 'Accord', year: 2019 },
    // 他の車
};

動的なキーのマッピング

Record型は、実行時に動的にキーを追加または削除する必要がある場合に役立ちます。

// 動的なキーのマッピングの例
const scores: Record<string, number> = {};
scores['Alice'] = 95;
scores['Bob'] = 87;
// 他のユーザーのスコアを追加

最後に

他にも色々な記事を書いているので、よければ読んでいってください、、、

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