最終我需要的是在運行時構建一個類聲明,為屬性註釋提供動態參數:
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.
deixe-me dizer algumas palavras