簡體   English   中英

如何以適當的方式在Typescript中動態創建Class?

[英]How to create Class dynamically in a proper way in 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

我不想將提供程序傳遞給基本模型中的構造函數。 任何幫助表示贊賞,謝謝。

您可以使用ReturnType<T>獲得函數類型的返回類型。

在這種情況下, ReturnType<typeof getModel>應該可以解決問題。

您還可以通過將T約束為對象類型來修復//@ts-ignore行。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM