在 javascript 中以編程方式創建類聲明?

為我們

最終我需要的是在運行時構建一個類聲明,為屬性註釋提供動態參數:

import {Type} from "external-module";

export default class TypeWrapper {

    @Type(() => '{this part of the class declaration should be changable at runtime}')
    data

}

我有一種感覺,這應該是可以實現的,但還沒有找到合適的方法。

作為概念證明,我試圖做如下事情:

let MyClass = eval('(class MyClass{})')
let myClass = new MyClass()

這有效,但是MyClass需要定義一些導入:

        let MyClass = eval('import {Type} from "external-module"' +
            '(class MyClass{})')

那個失敗了“ Cannot use import statement outside a module”,這是非常預期的。

我嘗試的另一種方法是從字符串加載模塊:

        var moduleData = '' +
            'import module from "./module/path/file.js"\n' +
            '\n' +
            'export default class MyClass {\n' +
            '}\n' +
            '\n';
        var b64moduleData = "data:text/javascript;base64," + btoa(moduleData);


        let MyClass = await import(b64moduleData)

但它以“ Cannot find module失敗,表明它假定b64moduleData是路徑而不是模塊數據本身。

有人有什麼建議嗎?

動物

通常,對於這種類型的事情,我會使用類工廠:

import { Type } from 'some-module';

function createClass(parameters) {
  return class {
    ....
  }
}

const MyClass = createClass(...);

根據提供的詳細信息,我不確定這是否適合您的特定用例。

編輯:作為旁注,據我所知,您不能從字符串構造模塊,這就是您的代碼在做什麼,以及編譯器在抱怨什麼。

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

以編程方式創建函數

從 EF 核心的類/對像以編程方式創建 MemberInitExpression

如何在 JavaScript 中的另一個類中創建一個類?

如何創建通過 TypeScript 中的類型聲明的數組的實例?

Javascript 無需類聲明即可工作

如何在 Vue 3 中以編程方式創建組件實例?

編寫一個程序,在 Javascript 中為給定的變量 n 創建乘法表

在 Javascript 中創建動態下拉列表

如何使用聲明創建視圖

javascript 面向對象編程中 super() 構造函數和子類方法的執行順序是什麼?

onCreateOptionsMenu 始終顯示為帶有我以編程方式創建的菜單的操作

數組等於 useState 聲明如何在 Javascript 中工作?

Firebase/javascript -- 如何將在 firestore 中創建的數據與用戶連接

從javascript中的大量路徑數據創建父/子json對象

我想創建一個函數,但我不會在 JavaScript 中

在 JavaScript 中從字符串創建數組內的數組

如何使用 javascript 代碼在谷歌分析中創建新屬性

在 Javascript 中創建按鈕的 Onclick 屬性不起作用

在intellij中創建一個類

用於創建 Firebase 用戶并快速添加聲明的腳本?

在運行時以編程方式更改 SVG 類

Vanilla Javascript:如何向在 django 中使用相同類動態創建的按鈕添加多個事件偵聽器?

javascript創建具有不同屬性的html

如何使用 Javascript 創建客戶端搜索欄

將 $(<div/>) Jquery 創建為純 Javascript

如何使用 jquery/javascript 創建引導卡?

當在 django 中按下表單提交按鈕時,如何創建一個更改 html 的 javascript 函數

沒有 JavaScript,意味著只有 CSS。如何在模型中創建給我的這個元素

如何在 Javascript 中創建一個唯一的 json 對象文字數據集?

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  3. 3

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  4. 4

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  5. 5

    Gerenciar recurso shake de Windows Aero com barra de título personalizado

  6. 6

    Como obter dados API adequados para o aplicativo angular?

  7. 7

    UITextView não está exibindo texto longo

  8. 8

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  9. 9

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  10. 10

    Usando o plug-in Platform.js do Google

  11. 11

    Como posso modificar esse algoritmo de linha de visada para aceitar raios que passam pelos cantos?

  12. 12

    Dependência circular de diálogo personalizado

  13. 13

    Coloque uma caixa de texto HTML em uma imagem em uma posição fixa para site para desktop e celular

  14. 14

    iOS: como adicionar sombra projetada e sombra de traço no UIView?

  15. 15

    Como usar a caixa de diálogo de seleção de nomes com VBA para enviar e-mail para mais de um destinatário?

  16. 16

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  17. 17

    How to create dynamic navigation menu select from database using Codeigniter?

  18. 18

    Converter valores de linha SQL em colunas

  19. 19

    ChartJS, várias linhas no rótulo do gráfico de barras

  20. 20

    用@StyleableRes注释的getStyledAttributes。禁止警告

  21. 21

    não é possível adicionar dependência para com.google.android.gms.tasks.OnSuccessListener

quentelabel

Arquivo