TypeScript を使用する場合、共用体型と、その型で取り得るすべての値を含む配列を定義する必要がある場合があります。一般的なアプローチは、次のように記述することです:
type Taste = 'しょうゆ' | 'みそ' | 'とんこつ'; const tastes = ['しょうゆ', 'みそ', 'とんこつ'];
一見すると、これで問題ないようです。ただし、ここには隠れた問題があります。オプションを変更または追加するたびに、テイスト ユニオン タイプとテイスト配列の両方を更新する必要があります。この作業の重複により間違いが発生する可能性があり、コードの保守がより面倒になります。
幸いなことに、冗長性を減らすことでこれを簡素化する方法があります。 TypeScript で as const アサーションと typeof を使用すると、共用体型と配列の両方の定義を 1 か所に統合できます。上記のコードをリファクタリングする方法は次のとおりです:
const tastes = ['しょうゆ', 'みそ', 'とんこつ'] as const; type Taste = (typeof tastes)[number];
このアプローチにはいくつかの利点があります:
単一の真実の情報源:
値のリストは、tastes 配列内で 1 回だけ定義します。テイスト タイプはこの配列から自動的に派生されるため、リストを更新する必要がある場合は、1 か所で行うだけで済みます。
タイプ セーフティ:
const として使用すると、TypeScript はテイスト配列を単なる文字列配列ではなくリテラル型のタプルとして扱います。これにより、テイスト タイプが正確に保たれ、テイストの値と一致することが保証されます。
メンテナンスの改善:
テイストの型は配列から生成されるため、型と実際の値が不一致になる心配はありません。これにより、バグの可能性が減り、コードの保守が容易になります。
これで、コード内で Taste タイプを使用するときは常に、Tastes 配列の値と一致することが保証されます。
function describeTaste(taste: Taste): string { switch (taste) { case 'しょうゆ': return 'Savory soy sauce flavor.'; case 'みそ': return 'Rich miso flavor.'; case 'とんこつ': return 'Creamy pork broth flavor.'; default: return 'Unknown taste'; } } const allTastes: Taste[] = tastes; // Safe, because they match the type!
このパターンはコードの可読性を向上させるだけでなく、特に同期を保つ必要がある複数の値を扱う場合にエラーが発生しにくくなります。
この戦略を採用すると、TypeScript コードをより保守しやすく、スケーラブルにすることができます。これは、大規模な値のセットを扱う場合、またはコードベースが時間の経過とともに増大する場合に特に便利です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3