Typescriptで適切な方法で動的にクラスを作成するにはどうすればよいですか?

trd3v3lop

アプリをtypescriptに移行しようとしています。基本ライブラリオブジェクトである基本クラスがあります。私のクラスは基本クラスに依存して作成されました。以下は私の問題を垣間見ることです。

以下のコードは機能しますが、オートコンプリートは機能しません。のタイプに対して何を定義する必要があるかを理解できませんでしたModel

const map = new WeakMap();
function weakRef<T>(context: T): T {
  // @ts-ignore
  if (!map.has(context)) { map.set(context, {}); }
  // @ts-ignore
  return map.get(context);
}
function getModel(provider: Provider) {
  return class Model {
    getSomething(key: string) {
      return weakRef(provider).configuration(key);
    }
  };
}

class Provider {
  configuration: (key: string) => string;
  constructor() {
    weakRef(this).configuration = (key: string) => {
      return key;
    };
    weakRef(this).Model = getModel(this);
  }
  get Model(): any {
    return weakRef(this).Model;
  }
  set Model(model: any) {
    weakRef(this).Model = model;
  }
}

const provider = new Provider();
const obj = new (provider.Model)();
console.log(obj.getSomething('test')); // This works, but autocomplete doesn't

ベースモデルのコンストラクターにプロバイダーを渡したくありません。どんな助けでもありがたいです、ありがとう。

Gerrit0

関数型の戻り値の型はReturnType<T>で取得できます

この場合、ReturnType<typeof getModel>トリックを行う必要があります。

オブジェクトタイプに//@ts-ignore制約Tすることで行を修正することもできます。

const map = new WeakMap();
function weakRef<T extends object>(context: T): T {
  if (!map.has(context)) { map.set(context, {}); }
  return map.get(context);
}

そうは言っても、このアーキテクチャは不必要に複雑だと思います。this関連付けられた値の代わりに使用しないのはなぜthisですか?

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

適切なクラス構造を作成するにはどうすればよいですか?

分類Dev

クラスメソッドを適切に作成するにはどうすればよいですか?

分類Dev

トランクからSVNタグを適切に作成するにはどうすればよいですか?

分類Dev

クローン作成方法を適切に継承するにはどうすればよいですか?

分類Dev

idを使用せずに動的なcssクラスを作成するにはどうすればよいですか?

分類Dev

クラスで関数を適切に使用するにはどうすればよいですか?

分類Dev

Swiftのクラス間で値を適切に送信するにはどうすればよいですか?

分類Dev

JSで動的テーブルを適切に作成するにはどうすればよいですか?

分類Dev

JSのキャンバスでclearRect()なしでボックスをより適切に移動するにはどうすればよいですか?

分類Dev

TypeScriptを使用して、クラスに適切な関数仕様を実装させるにはどうすればよいですか?

分類Dev

スクリプトレットを使用して適切に機能するモデルを動的に作成するにはどうすればよいですか?

分類Dev

動的なCSSクラスを作成するにはどうすればよいですか?

分類Dev

クラスを適切に内部化するにはどうすればよいですか?

分類Dev

複製されている1つのボックスで適切なリストを作成するにはどうすればよいですか?

分類Dev

このコンストラクターを適切な方法で定義するにはどうすればよいですか?

分類Dev

親クラスのメソッドを適切に使用し、キーワードをtypescriptで拡張するにはどうすればよいですか?

分類Dev

CSSバックグラウンドでSVGスプライトタイルを適切に作成するにはどうすればよいですか?

分類Dev

提供されたJSON応答に適切なPOJOを作成するにはどうすればよいですか?

分類Dev

Gradleプラグインでタスクを動的に作成するにはどうすればよいですか?

分類Dev

生成されたNSManagedObjectサブクラスをプロジェクトに適切に移動するにはどうすればよいですか?

分類Dev

CでのC ++クラスの使用:ある種の「削除/破棄」関数を適切に作成するにはどうすればよいですか?

分類Dev

Pythonで適切な単語検索を作成するにはどうすればよいですか?

分類Dev

複数の条件で適切なforループを作成するにはどうすればよいですか?

分類Dev

pygameでblit()を適切な方法で使用するにはどうすればよいですか?

分類Dev

Windows Phone 7でEnum.Parseを適切な方法で使用するにはどうすればよいですか?

分類Dev

自分のリストスタイルを適切に作成するにはどうすればよいですか?

分類Dev

変更できないクラスをC#で作成するにはどうすればよいですか?

分類Dev

JavaでBewjeledを作成していますが、ユーザーからの適切な移動を確認するにはどうすればよいですか?

分類Dev

クラスのオブジェクトを動的に作成するにはどうすればよいですか?

Related 関連記事

  1. 1

    適切なクラス構造を作成するにはどうすればよいですか?

  2. 2

    クラスメソッドを適切に作成するにはどうすればよいですか?

  3. 3

    トランクからSVNタグを適切に作成するにはどうすればよいですか?

  4. 4

    クローン作成方法を適切に継承するにはどうすればよいですか?

  5. 5

    idを使用せずに動的なcssクラスを作成するにはどうすればよいですか?

  6. 6

    クラスで関数を適切に使用するにはどうすればよいですか?

  7. 7

    Swiftのクラス間で値を適切に送信するにはどうすればよいですか?

  8. 8

    JSで動的テーブルを適切に作成するにはどうすればよいですか?

  9. 9

    JSのキャンバスでclearRect()なしでボックスをより適切に移動するにはどうすればよいですか?

  10. 10

    TypeScriptを使用して、クラスに適切な関数仕様を実装させるにはどうすればよいですか?

  11. 11

    スクリプトレットを使用して適切に機能するモデルを動的に作成するにはどうすればよいですか?

  12. 12

    動的なCSSクラスを作成するにはどうすればよいですか?

  13. 13

    クラスを適切に内部化するにはどうすればよいですか?

  14. 14

    複製されている1つのボックスで適切なリストを作成するにはどうすればよいですか?

  15. 15

    このコンストラクターを適切な方法で定義するにはどうすればよいですか?

  16. 16

    親クラスのメソッドを適切に使用し、キーワードをtypescriptで拡張するにはどうすればよいですか?

  17. 17

    CSSバックグラウンドでSVGスプライトタイルを適切に作成するにはどうすればよいですか?

  18. 18

    提供されたJSON応答に適切なPOJOを作成するにはどうすればよいですか?

  19. 19

    Gradleプラグインでタスクを動的に作成するにはどうすればよいですか?

  20. 20

    生成されたNSManagedObjectサブクラスをプロジェクトに適切に移動するにはどうすればよいですか?

  21. 21

    CでのC ++クラスの使用:ある種の「削除/破棄」関数を適切に作成するにはどうすればよいですか?

  22. 22

    Pythonで適切な単語検索を作成するにはどうすればよいですか?

  23. 23

    複数の条件で適切なforループを作成するにはどうすればよいですか?

  24. 24

    pygameでblit()を適切な方法で使用するにはどうすればよいですか?

  25. 25

    Windows Phone 7でEnum.Parseを適切な方法で使用するにはどうすればよいですか?

  26. 26

    自分のリストスタイルを適切に作成するにはどうすればよいですか?

  27. 27

    変更できないクラスをC#で作成するにはどうすればよいですか?

  28. 28

    JavaでBewjeledを作成していますが、ユーザーからの適切な移動を確認するにはどうすればよいですか?

  29. 29

    クラスのオブジェクトを動的に作成するにはどうすればよいですか?

ホットタグ

アーカイブ