TypeScript オブジェクトのインデックス付きメンバーにタイプを適用する

Shuvayan Ghosh Dastidar 2023年1月30日
  1. マップされたタイプを使用して、TypeScript オブジェクトのインデックス付きメンバーのタイプを適用する
  2. タイプがマップされた汎用タイプを使用して、TypeScript オブジェクトのインデックス付きメンバーのタイプを適用する
  3. Record タイプを使用して、TypeScript オブジェクトのインデックス付きメンバーのタイプを適用する
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
Shuvayan Ghosh Dastidar avatar Shuvayan Ghosh Dastidar avatar

Shuvayan is a professional software developer with an avid interest in all kinds of technology and programming languages. He loves all kinds of problem solving and writing about his experiences.

LinkedIn Website

関連記事 - TypeScript Map