TypeScriptの辞書をマスター:インデックスシグネチャとRecord型
Emily Parker
Product Engineer · Leapcell

Key Takeaways
- TypeScriptの辞書は、インデックスシグネチャまたは
Record<K, V>
ユーティリティ型を使用して定義されます。 Record
で特定のキー型を使用すると、型安全性とIDEのサポートが向上します。- 辞書を扱う際には、イテレーションとイミュータブル(不変性)が重要な考慮事項です。
TypeScriptはJavaScriptのスーパーセットであり、JavaScript開発に強力な型チェック機能をもたらします。一般的に使用されるデータ構造の1つが辞書であり、マップまたは動的なキーを持つオブジェクトとも呼ばれます。この記事では、TypeScriptで辞書を定義および使用する方法、ベストプラクティス、および型安全なパターンについて説明します。
TypeScriptでの辞書とは?
TypeScriptでは、辞書は通常、キーと値のペアを格納するために使用されるオブジェクトであり、キーは通常文字列(または場合によっては数値)であり、値は任意の型にすることができます。
例:
const scores: { [key: string]: number } = { Alice: 95, Bob: 82, Charlie: 78 };
この場合、scores
は、キーが学生の名前(文字列)で、値が数値スコアである辞書です。
辞書型の定義
再利用可能な辞書型は、複数の方法で定義できます。
1. インデックスシグネチャの使用
type StringToNumberMap = { [key: string]: number; }; const ages: StringToNumberMap = { John: 30, Jane: 25 };
このアプローチは柔軟ですが、可能なキーを制限しないため、タイプミスを許容する可能性があります。
2. Record
ユーティリティ型の使用
TypeScriptには、組み込みのRecord<K, V>
ユーティリティ型が用意されています。
const userRoles: Record<string, string> = { admin: 'full-access', guest: 'read-only' };
キーが既知で固定されている場合は、特定の文字列リテラルを使用する方が適切です。
type UserRole = 'admin' | 'guest'; const userPermissions: Record<UserRole, string> = { admin: 'all', guest: 'limited' };
これにより、型安全性とIDEのオートコンプリートサポートが向上します。
オプションおよび読み取り専用の辞書の値
値をオプションまたは読み取り専用としてマークできます。
type UserSettings = { [key: string]: string | undefined; }; const settings: UserSettings = { theme: 'dark', language: undefined };
またはRecord
を使用する場合:
type FeatureFlags = Record<string, boolean | undefined>;
読み取り専用辞書の場合:
const config: Readonly<Record<string, string>> = { version: '1.0.0', env: 'production' };
辞書の反復処理
次のようにして、辞書のキーを反復処理できます。
for (const key in scores) { if (scores.hasOwnProperty(key)) { console.log(`${key}: ${scores[key]}`); } }
または、より良い制御のためにObject.entries()
を使用します。
Object.entries(scores).forEach(([name, score]) => { console.log(`${name}: ${score}`); });
一般的なユースケース
- IDによるデータのキャッシュ
- 単語の頻度のカウント
- 構成オプション
- 列挙型と文字列間のマッピング
結論
TypeScriptの辞書は、汎用的で不可欠なデータ構造です。インデックスシグネチャまたはRecord
ユーティリティ型を使用することにより、TypeScriptの静的型付けシステムとうまく統合される柔軟で型安全な辞書を構築できます。辞書型のニュアンスを理解することで、より堅牢で保守しやすいコードを作成できます。
FAQs
インデックスシグネチャは動的なキーを許可しますが、Record
は事前定義されたキーによるより厳密な型付けを提供します。
値を変更できないように、辞書型をReadonly<Record<K, V>>
でラップします。
はい、値にstring | undefined
を使用するか、?
を使用してオプションとして定義できます。
Leapcellは、Node.jsプロジェクトをホストするための最適な選択肢です。
Leapcellは、Webホスティング、非同期タスク、およびRedis向けの次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発します。
無制限のプロジェクトを無料でデプロイ
- 使用量に応じてのみ料金が発生します — リクエストも課金もありません。
比類のない費用対効果
- アイドル料金なしの従量課金制。
- 例:$25で、平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムのメトリックとロギング。
簡単なスケーラビリティと高いパフォーマンス
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用オーバーヘッドゼロ — 構築に集中するだけです。
詳細については、ドキュメントをご覧ください。
Xでフォローしてください:@LeapcellHQ