在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:argument不是Object而不是null”
有没有人知道为什么这些不适合我,和/或我如何根据包含类名的变量的值在Typescript中实例化一个类?谢谢!
你不能用class
做 - 你必须使用ES5构造函数:
function MyClass() {}
MyClass.prototype.someFunc = function() {
alert("Hello!");
};
var myClassName = "MyClass";
var myClassInstance = new window[myClassName]();
myClassInstance.someFunc();
这些“答案”不起作用的原因是因为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");}
}
代替