在TypeScript中,我在其他讨论中看到应该有一种方法来创建其类型取决于变量的类。
例如,如果我们有。 。 。
class MyClass {
someFunc(){alert("Hello");}
}
var myClassName = "MyClass";
答案可能是:
答案#1:
var myClassInstance = new (<any>window)[myClassName]();
答案2:
var myClassInstance = Object.create(window[myClassName]);
我正在控制台中尝试这些,但对我都不起作用。
对于#1,我收到错误消息:“语法错误”,或者如果我省略<any>
,则“对象不支持此操作”。
对于#2,我收到错误消息:“ Object.create:参数不是对象,也不为空”
有人知道为什么这些方法对我不起作用,和/或如何根据持有类名的变量的值实例化Typescript中的类吗?谢谢!
答案 0 :(得分:3)
您无法使用class
来完成它-您必须使用ES5构造函数:
function MyClass() {}
MyClass.prototype.someFunc = function() {
alert("Hello!");
};
var myClassName = "MyClass";
var myClassInstance = new window[myClassName]();
myClassInstance.someFunc();
答案 1 :(得分:1)
这些“答案”不起作用的原因是因为MyClass
不是全局对象的属性(在您的情况下为窗口)
对于在全局范围内使用let
和const
声明的变量也是如此
但是,由于您似乎愿意改用旧式定义,即愿意重写类定义,因此您始终可以使用它-只需很少的重写就可以了
var
而不是let
或const
var MyClass = class MyClass {
someFunc(){alert("Hello");}
}
var AnotherClass = class AnotherClass {
someFunc(){alert("Hello again");}
}
var YetAnotherClass = class YetAnotherClass {
someFunc(){alert("Hello once more");}
}
然后您可以简单地
let instance = new window[myClassName]();
此外,取决于类的定义位置/方式(在导入中?),实际上可能需要执行类似的操作
window.MyClass = class MyClass {
someFunc(){alert("Hello");}
}
代替