TypeScript オブジェクトのインデックス付きメンバーにタイプを適用する
- マップされたタイプを使用して、TypeScript オブジェクトのインデックス付きメンバーのタイプを適用する
- タイプがマップされた汎用タイプを使用して、TypeScript オブジェクトのインデックス付きメンバーのタイプを適用する
-
Record
タイプを使用して、TypeScript オブジェクトのインデックス付きメンバーのタイプを適用する
TypeScript は厳密に型指定された言語であり、この言語の一部として使用されるすべての構成要素は厳密に型指定されています。インターフェイスやタイプのような構造があり、これらはプリミティブタイプとユーザー定義タイプを組み合わせたものです。
TypeScript のマップされたタイプのカテゴリにあるマップやインデックスタイプのような複雑なタイプを持つこともできます。このチュートリアルでは、マップされたタイプを TypeScript で使用する方法を示します。
マップされたタイプを使用して、TypeScript オブジェクトのインデックス付きメンバーのタイプを適用する
マップされたタイプは、TypeScript のオブジェクトのキーと値のタイプが固定された固定スキーマを持つオブジェクトを表すことができます。これらは、インデックス署名の構文に基づいて構築されています。
type NumberMapType = {
[key : string] : number;
}
// then can be used as
const NumberMap : NumberMapType = {
'one' : 1,
'two' : 2,
'three' : 3
}
オブジェクトのキーのタイプを固定する以外に、マップされたタイプを使用して、インデックス署名を使用してオブジェクト内のすべてのキーのタイプを変更できます。
interface Post {
title : string;
likes : number;
content : string;
}
type PostAvailable = {
[K in keyof Post] : boolean;
}
const postCondition : PostAvailable = {
title : true,
likes : true,
content : false
}
以下は、インターフェース Post
のキーを使用して、それらを別のタイプのブール値にマップします。
タイプがマップされた汎用タイプを使用して、TypeScript オブジェクトのインデックス付きメンバーのタイプを適用する
マップされた型は、一般的な型付きオブジェクトの作成にも使用できます。汎用型を使用して、動的型を使用して型を作成できます。
enum Colors {
Red,
Yellow,
Black
}
type x = keyof typeof Colors;
type ColorMap<T> = {
[K in keyof typeof Colors] : T;
}
const action : ColorMap<string> = {
Black : 'Stop',
Red : 'Danger',
Yellow : 'Continue'
}
const ColorCode : ColorMap<Number> = {
Black : 0,
Red : 1,
Yellow : 2
}
上記の例では、マップされた型付きオブジェクトで列挙型 Colors
が使用されており、ColorMap<T>
でサポートされている汎用型に応じてさまざまな型が適用されています。
Record
タイプを使用して、TypeScript オブジェクトのインデックス付きメンバーのタイプを適用する
Record
タイプは TypeScript の組み込みタイプであり、TypeScript のオブジェクトにタイプを適用するために使用できます。Record
タイプは、キーのタイプとオブジェクトの値の 2つのフィールドを受け入れます。
これは、他のプログラミング言語で見られるマップとして見ることができます。
const LogInfo : Record<string, string> = {
'debug' : 'Debug message',
'info' : 'Info message',
'warn' : 'Warning message',
'fatal' : 'Fatal error'
}
const message = LogInfo['debug'] + " : Hello world";
console.log(message);
出力:
Debug message : Hello world