ジェネリック型のTypescript拡張インターフェイスにより、制約エラーのサブタイプが発生する

完了:

ResourceStateインターフェイス内で入力されるデフォルトの状態値を持つ抽象クラスがあります。State抽象クラスの状態プロパティに拡張割り当てようとすると、次のエラーが発生します交差点を使用してさまざまな方法を試しましたが、まだ機能しません。私が達成したいのは、デフォルトプロパティ以外の値を追加できるように、stateプロパティへのジェネリックインターフェイスを提供できることです。

これは私が得たエラーです:

タイプ '{items:never []; isLoading:false; エラー:文字列; } 'はタイプ' State 'に割り当てることができません。'{アイテム:なし[]; isLoading:false; エラー:文字列; } 'はタイプ' State 'の制約に割り当て可能ですが、' State 'は制約' ResourceState 'の異なるサブタイプでインスタンス化できます。

これは私のコードです:

export interface BaseItem {
  id: string;
  name: string;
}

export interface ResourceState < Item extends BaseItem > {
  items: Item[];
  selectedItem ? : Item;
  isLoading: boolean;
  error: string;
}

export abstract class Resource < Item extends BaseItem, State extends ResourceState < Item > , Mutations, Getters, Actions > {
  state: State = { // this is where the error occurs
    items: [],
    isLoading: false,
    error: '',
  }
}

アレックスウェイン:

あなたが言うときState extends ResourceState<Item>、あなたはそれを言っているStateのニーズが準拠するResourceState<Item>が、これはジェネリック型パラメータであるので、それは正確ではないかもしれませんResourceState<Item>

これを想像してみてください:

interface MyState extends ResourceState<{ a: 123 }> {
  myCustomRequiredProperty: number
}

次にクラスを渡しMyStateState状態を次のように構築します。

  state: State = { // this is where the error occurs
    items: [],
    isLoading: false,
    error: '',
  }

次に、必要なプロパティを使用state変数を作成しませんmyCustomRequiredProperty

これは、typescriptが(暗号的に)伝えようとしているエラーです。


あなたが状態変数構築している場合はResource、クラスを、その後、Stateこのクラスでは、あなたの実行可能コードは、一般的に渡すことができますタイプのすべてのプロパティを知ることができないので、一般的なことではないはずです。そうStateはならないextend ResourceState<Item>、それは正確でなければなりませんResourceState<Item>

これは次のようになります。

export abstract class Resource<Item extends BaseItem> {
  state: ResourceState<Item> = {
    items: [],
    isLoading: false,
    error: '',
  }
}

遊び場


ただし、状態にプロパティを追加する機能が必要な場合は、いくつかの初期値がないと実行できません。どういうわけか、これらの不明なプロパティを初期化する必要があります。そのためには、上記のアプローチを使用しますが、完全な状態であるすべてのタイプを受け入れるコンストラクターを使用して、その情報を持つオブジェクトをそのタイプの不明なプロパティに入力します。

export abstract class Resource<
  Item extends BaseItem,
  State extends ResourceState<Item>
> {
  state: State

  constructor(initialState: State) {
    this.state = {
      ...initialState, // Fills in extended properties
      items: [],
      isLoading: false,
      error: '',
    }
  }
}

遊び場

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

ジェネリックインターフェイスの制約が拡張メソッドの使用を台無しにするのはなぜですか?

分類Dev

typescriptジェネリックスのインターフェイスメンバーに対する制約

分類Dev

Java-戻りの型が独自のメソッドパラメータ型にジェネリックを使用する場合の拡張インターフェースの戻りの型のオーバーライド

分類Dev

ジェネリック型のインターフェースを返すときにエラーが発生する

分類Dev

型制約のあるジェネリックインターフェイスを実装するジェネリッククラスがこれらの制約を繰り返す必要があるのはなぜですか?

分類Dev

ネストされたジェネリック制約:そのジェネリック型に制約されているジェネリックシーケンス拡張内のジェネリックアイテムのTを制約します

分類Dev

ジェネリック関数(インターフェースで実装された制約付き)を呼び出すと、制約が欠落しているというエラーが発生します。何が見えないのですか?

分類Dev

ジェネリック型のインターフェースにJavaの別のジェネリック型の別のインターフェースを拡張させる方法はありますか?

分類Dev

ジェネリック型がJavaの別のクラス/インターフェースを拡張することを確認する方法は?

分類Dev

Typescriptジェネリック型を使用するインターフェイスを拡張するにはどうすればよいですか?

分類Dev

ジェネリッククラスでインターフェイスを拡張するときのNoSuchFieldError

分類Dev

ジェネリック拡張のタイプを制約する方法

分類Dev

クラスとインターフェイスを拡張するTypescriptジェネリック

分類Dev

Rustコンパイラがジェネリック型パラメータのライフタイムを制約するように要求するのはなぜですか(エラーE0309)?

分類Dev

ジェネリックTypeScriptインターフェイスを別のジェネリックインターフェイスから拡張するにはどうすればよいですか?

分類Dev

Javaジェネリック、インターフェイス、および型の制約

分類Dev

Javaジェネリック、インターフェイス、および型の制約

分類Dev

ジェネリック拡張クラスおよびKotlinのインターフェイスの実装

分類Dev

ジェネリック型インターフェイスのジェネリック拡張関数を単純化しようとしているC#

分類Dev

パンダのリサンプルにより、日時オブジェクトで構成されるインデックスのタイプエラーが発生します

分類Dev

Androidライブラリプロジェクトにバターナイフを追加すると、ライブラリクラスのコンパイル時に「パッケージが存在しません」というエラーが発生します

分類Dev

制約付きの別のジェネリックインターフェイスを実装するジェネリッククラスを作成するJava

分類Dev

Haxeでは、インターフェイスのジェネリック型で型パラメーターを制約できますか?

分類Dev

Java:オブジェクトの作成によりランタイムエラーが発生する

分類Dev

Javaのジェネリック、インターフェイスの拡張

分類Dev

インスタンスのプロパティタイプをジェネリックパラメータと比較することにより、ジェネリック関数を制約します

分類Dev

タイプパラメータクラスに対するTypescriptジェネリック制約

分類Dev

関連するタイプとジェネリックの使用中にエラーが発生しました

分類Dev

列挙型に対してジェネリックである必要があるクラスを使用して、ジェネリックなインターフェイスを拡張するにはどうすればよいですか?

Related 関連記事

  1. 1

    ジェネリックインターフェイスの制約が拡張メソッドの使用を台無しにするのはなぜですか?

  2. 2

    typescriptジェネリックスのインターフェイスメンバーに対する制約

  3. 3

    Java-戻りの型が独自のメソッドパラメータ型にジェネリックを使用する場合の拡張インターフェースの戻りの型のオーバーライド

  4. 4

    ジェネリック型のインターフェースを返すときにエラーが発生する

  5. 5

    型制約のあるジェネリックインターフェイスを実装するジェネリッククラスがこれらの制約を繰り返す必要があるのはなぜですか?

  6. 6

    ネストされたジェネリック制約:そのジェネリック型に制約されているジェネリックシーケンス拡張内のジェネリックアイテムのTを制約します

  7. 7

    ジェネリック関数(インターフェースで実装された制約付き)を呼び出すと、制約が欠落しているというエラーが発生します。何が見えないのですか?

  8. 8

    ジェネリック型のインターフェースにJavaの別のジェネリック型の別のインターフェースを拡張させる方法はありますか?

  9. 9

    ジェネリック型がJavaの別のクラス/インターフェースを拡張することを確認する方法は?

  10. 10

    Typescriptジェネリック型を使用するインターフェイスを拡張するにはどうすればよいですか?

  11. 11

    ジェネリッククラスでインターフェイスを拡張するときのNoSuchFieldError

  12. 12

    ジェネリック拡張のタイプを制約する方法

  13. 13

    クラスとインターフェイスを拡張するTypescriptジェネリック

  14. 14

    Rustコンパイラがジェネリック型パラメータのライフタイムを制約するように要求するのはなぜですか(エラーE0309)?

  15. 15

    ジェネリックTypeScriptインターフェイスを別のジェネリックインターフェイスから拡張するにはどうすればよいですか?

  16. 16

    Javaジェネリック、インターフェイス、および型の制約

  17. 17

    Javaジェネリック、インターフェイス、および型の制約

  18. 18

    ジェネリック拡張クラスおよびKotlinのインターフェイスの実装

  19. 19

    ジェネリック型インターフェイスのジェネリック拡張関数を単純化しようとしているC#

  20. 20

    パンダのリサンプルにより、日時オブジェクトで構成されるインデックスのタイプエラーが発生します

  21. 21

    Androidライブラリプロジェクトにバターナイフを追加すると、ライブラリクラスのコンパイル時に「パッケージが存在しません」というエラーが発生します

  22. 22

    制約付きの別のジェネリックインターフェイスを実装するジェネリッククラスを作成するJava

  23. 23

    Haxeでは、インターフェイスのジェネリック型で型パラメーターを制約できますか?

  24. 24

    Java:オブジェクトの作成によりランタイムエラーが発生する

  25. 25

    Javaのジェネリック、インターフェイスの拡張

  26. 26

    インスタンスのプロパティタイプをジェネリックパラメータと比較することにより、ジェネリック関数を制約します

  27. 27

    タイプパラメータクラスに対するTypescriptジェネリック制約

  28. 28

    関連するタイプとジェネリックの使用中にエラーが発生しました

  29. 29

    列挙型に対してジェネリックである必要があるクラスを使用して、ジェネリックなインターフェイスを拡張するにはどうすればよいですか?

ホットタグ

アーカイブ