別のオブジェクトのプロパティに基づいてオブジェクトのプロパティを入力する(Typescript内)

epere4

自分の欲しいものが可能かどうかはよくわかりません。私はしばらく試してみましたが、今はあきらめてコミュニティに助けを求めています。

次のような構成オブジェクトが必要です。

const someConfig: ParameterDescriptions = {
  someNumProperty: {
    name: 'numPropert',
    type: 'number',
    defaultValue: 42,
  },
  someStrProperty: {
    name: 'strPropert',
    type: 'string',
    defaultValue: 'some default value',
  },
  someBoolProperty: {
    name: 'boolProperty',
    type: 'boolean',
    defaultValue: false,
  },
};

そして、次のようなオブジェクト:

interface MyState {
  someNumProperty: number;
  someStrProperty: string;
  someBoolProperty: boolean;
}

MyState同じプロパティを持ちますがsomeConfig、それぞれParameterDescのタイププロパティに記載されているタイプを使用して強制したいと思います

このParameterDescriptionsように見えます:

export interface BaseParameterDesc {
  name: string;
}

export interface NumberParameterDesc extends BaseParameterDesc {
  type: 'number';
  defaultValue?: number;
}

export interface StringParameterDesc extends BaseParameterDesc {
  type: 'string';
  defaultValue?: string;
}

export interface BooleanParameterDesc extends BaseParameterDesc {
  type: 'boolean';
  defaultValue?: boolean;
}

export type ParameterDesc =
    NumberParameterDesc|StringParameterDesc|BooleanParameterDesc;

export type ParameterDescriptions = {
  [key: string]: ParameterDesc;
};

しかし、MyStateとのインスタンスとの関係を作成する方法がわかりませんParameterDescription

私が持っていたアイデアの1つは、MyStateにこれを強制しようとするStateタイプを実装させることでしたが、実際には機能しません

type State<PDesc extends ParameterDescriptions> = {
  // The .type at the end does not work, but I don't know
  // of alternatives
  [property in keyof PDesc]: PDesc[property].type;
};

何か案は?それともこれは不可能ですか?

この投稿のすべてのコードは、このTypescriptPlaygroundにあります。

Titian Cernicova-Dragomir

解決する必要のある最初の問題は、定義する方法がsomeConfig実際にはプロパティ名を保持せず、任意の文字列でインデックス付け可能な変数になることです。ParameterDescriptions一般的なヘルパー関数を使用すると、実際のキー作成の制約を簡単に適用して保持できます。

function createConfig<T extends ParameterDescriptions>(c: T): T {
    return c;
}

const someConfig = createConfig({
    someNumProperty: {
        name: 'numPropert',
        type: 'number',
        defaultValue: 42,
    },
    someStrProperty: {
        name: 'strPropert',
        type: 'string',
        defaultValue: 'some default value',
    },
    someBoolProperty: {
        name: 'boolProperty',
        type: 'boolean',
        defaultValue: false,
    },
});

someConfigキー名保持されるようになったので、同様のアプローチを使用できます。typeプロパティをタイプとして直接使用することはできません。タイプ名とタイプの間でマップするために追加のタイプが必要です(条件付きタイプを使用することもできますが、これは簡単に思えますこの場合)

type TypeNamesToTypes = {
    boolean: boolean;
    string: string;
    number: number;
}
type State<T extends ParameterDescriptions> = { [P in keyof T]: TypeNamesToTypes[T[P]['type']]}
type MyState = State<typeof someConfig> // same as = {someNumProperty: number;someStrProperty: string;someBoolProperty: boolean;}

遊び場リンク

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

他のプロパティに基づいてオブジェクトリテラルでオブジェクトプロパティを計算する方法

分類Dev

プロパティ値に基づいて配列内のオブジェクトを制限する

分類Dev

Typescriptオブジェクトのプロパティの入力

分類Dev

TypeScriptで匿名オブジェクトのプロパティを入力する

分類Dev

プロパティに基づいて配列内のオブジェクトをマージします

分類Dev

typescriptのプロパティに基づいてオブジェクトの配列を並べ替えます

分類Dev

TypeScriptのオブジェクトプロパティの型を他のプロパティに基づいて動的に制限する

分類Dev

TypeScriptの文字列値プロパティに基づいてオブジェクトを並べ替える

分類Dev

オブジェクト内の1つのプロパティに基づいて、リストから最新のオブジェクトを取得します

分類Dev

別のオブジェクトに基づいてオブジェクトのプロパティを割り当てる方法

分類Dev

ジェネリック関数にJavaの入力に基づいてオブジェクトプロパティを取得させる方法

分類Dev

2つのプロパティに基づいてオブジェクトのキーを検索する

分類Dev

プロパティの値に基づいて単一のレルムオブジェクトを取得する

分類Dev

条件に基づいて、オブジェクトの配列のプロパティを合計する方法

分類Dev

プロパティに基づいてオブジェクトのリストを分割するc#

分類Dev

別のオブジェクト配列のプロパティに基づいてオブジェクト配列を並べ替える

分類Dev

オブジェクトのプロパティに基づいて、配列内のオブジェクトキーを並べ替える方法は?

分類Dev

オブジェクトのプロパティに基づいてボタンを無効にする

分類Dev

IDに基づいてオブジェクトのプロパティを表示するには

分類Dev

プロパティ値に基づいてリスト内の個別のオブジェクトを取得する

分類Dev

JS-1つのプロパティの重複についてオブジェクトの配列をフィルタリングし、別のプロパティに基づいて保持するオブジェクトを決定します

分類Dev

動的プロパティに基づいてオブジェクト値の配列を変更する

分類Dev

オブジェクトのプロパティに基づいて配列を作成する

分類Dev

変数に基づいてオブジェクトのプロパティを変更する

分類Dev

2つのプロパティに基づいて配列からオブジェクトを削除する

分類Dev

別のオブジェクト内のオブジェクト プロパティにアクセスする

分類Dev

他のプロパティに基づいてオブジェクトのいくつかのプロパティをグループ化する方法

分類Dev

TypeScriptの他のタイプに基づいてオブジェクトプロパティをオプションにする方法は?

分類Dev

EntityFrameworkによって入力されている別のオブジェクト内のList <T>プロパティを注文する方法

Related 関連記事

  1. 1

    他のプロパティに基づいてオブジェクトリテラルでオブジェクトプロパティを計算する方法

  2. 2

    プロパティ値に基づいて配列内のオブジェクトを制限する

  3. 3

    Typescriptオブジェクトのプロパティの入力

  4. 4

    TypeScriptで匿名オブジェクトのプロパティを入力する

  5. 5

    プロパティに基づいて配列内のオブジェクトをマージします

  6. 6

    typescriptのプロパティに基づいてオブジェクトの配列を並べ替えます

  7. 7

    TypeScriptのオブジェクトプロパティの型を他のプロパティに基づいて動的に制限する

  8. 8

    TypeScriptの文字列値プロパティに基づいてオブジェクトを並べ替える

  9. 9

    オブジェクト内の1つのプロパティに基づいて、リストから最新のオブジェクトを取得します

  10. 10

    別のオブジェクトに基づいてオブジェクトのプロパティを割り当てる方法

  11. 11

    ジェネリック関数にJavaの入力に基づいてオブジェクトプロパティを取得させる方法

  12. 12

    2つのプロパティに基づいてオブジェクトのキーを検索する

  13. 13

    プロパティの値に基づいて単一のレルムオブジェクトを取得する

  14. 14

    条件に基づいて、オブジェクトの配列のプロパティを合計する方法

  15. 15

    プロパティに基づいてオブジェクトのリストを分割するc#

  16. 16

    別のオブジェクト配列のプロパティに基づいてオブジェクト配列を並べ替える

  17. 17

    オブジェクトのプロパティに基づいて、配列内のオブジェクトキーを並べ替える方法は?

  18. 18

    オブジェクトのプロパティに基づいてボタンを無効にする

  19. 19

    IDに基づいてオブジェクトのプロパティを表示するには

  20. 20

    プロパティ値に基づいてリスト内の個別のオブジェクトを取得する

  21. 21

    JS-1つのプロパティの重複についてオブジェクトの配列をフィルタリングし、別のプロパティに基づいて保持するオブジェクトを決定します

  22. 22

    動的プロパティに基づいてオブジェクト値の配列を変更する

  23. 23

    オブジェクトのプロパティに基づいて配列を作成する

  24. 24

    変数に基づいてオブジェクトのプロパティを変更する

  25. 25

    2つのプロパティに基づいて配列からオブジェクトを削除する

  26. 26

    別のオブジェクト内のオブジェクト プロパティにアクセスする

  27. 27

    他のプロパティに基づいてオブジェクトのいくつかのプロパティをグループ化する方法

  28. 28

    TypeScriptの他のタイプに基づいてオブジェクトプロパティをオプションにする方法は?

  29. 29

    EntityFrameworkによって入力されている別のオブジェクト内のList <T>プロパティを注文する方法

ホットタグ

アーカイブ