如何根据Typescript中的字符串实例化类?

如何根据Typescript中的字符串实例化类?,typescript,nestjs,Typescript,Nestjs,我想知道如何通过Nestjs和Typescript下的字符串来实例化一个类。 我用这个做了一些研究,但我有一个错误,WINDOWS没有定义 let paul:string=“Wall” let test=Object.create(新窗口[paul].prototype) console.log(test.constructor.name)//墙 引用错误:窗口未定义您尝试的操作不仅在更适合的语言中非常复杂,而且我怀疑在Typescript中是否可能 一个更好的解决方案是以不同的方式(更好地)规

我想知道如何通过Nestjs和Typescript下的字符串来实例化一个类。 我用这个做了一些研究,但我有一个错误,WINDOWS没有定义

let paul:string=“Wall”

let test=Object.create(新窗口[paul].prototype)

console.log(test.constructor.name)//墙


引用错误:窗口未定义

您尝试的操作不仅在更适合的语言中非常复杂,而且我怀疑在Typescript中是否可能

一个更好的解决方案是以不同的方式(更好地)规划整个事情,并遵循继承。 Paul类可能与Sue类一样从Person接口继承,因此可以使用父接口进行实例化

让我重新表述一下。。。您可以使用

let test: Person

switch(name) {
    case 'Paul':
        test = new Paul()
}
这会符合你的目的。。我猜你是想这样做,因为你想以后做类似的事情

let people: any[] = //...
for(let person of people) {

}
但你应该这样做

let people: Person[] = //...
for(let person of people) {

}
任何实现Person接口的类都可以适合您的人员数组

但是再一次,如果你真的需要一大堆不同名称的类,那么问题就来了,你真的需要单独的类吗

更新: 我看到你对我的评论了

WALL, 'Adrien' HOUSE, 'Pierre'
那样的话,你就用开关了

let houses: House[] = []
let walls: Wall[] = []

... 

switch(key) {
    case 'WALL':
        walls.push(new Wall(value))
    case 'HOUSE':
        houses.push(new House(value))

    ...

}

如果没有太多关于您实际试图构建的内容的信息,听起来您希望创建包含基于文本文件的信息的通用对象

如果要根据在文本文件中解析的内容实例化类,可以使用简单的If语句:

let object: any = undefined;
if (parsedString === "Wall) {
object = new Wall();
}
如果您实际上没有wall类,并且希望创建“wall”对象,我想知道它的用途是什么,因为它不会有任何wall行为,因此它并不比简单的字符串变量好。 因为您可以不使用object.constructor.name,而只为变量分配一个名为的字符串,而不是实例化空对象

let objectName: string = "";
objectName = parsedString;
或者,如果必须是对象,只需为空对象指定名称属性:

let myObject: object = {};
myObject.name = parsedString;
我确实认为您在尝试做的事情中存在设计缺陷,如果您能给我们更好的描述,我相信我们可以帮助您正确设计软件以实现您的目标


窗口
是浏览器端JavaScript中的全局对象。目前还不清楚您正在尝试做什么,例如,为什么要尝试使用字符串创建类?我想要几个具有不同类型的对象。通过在文本文件中将它们作为字符串读取,我知道这些类型。例如,在我的文件中,我有这样一个:WALL,'Adrien'HOUSE,'Pierre'我想自动执行此操作:让Adrien=new WALL();让皮埃尔=新房子();除了墙和房子可以根据文件的不同而变化。结果应该是这样的:let string1=“WALL”let paul=new string1();是的,我可以使用开关,但我有30级。因此,有30个案例的切换不是很漂亮,因此我的理由是以不同的方式(更好地)规划整个事情;)更好的解决方案是在数据库中有一个json列,并以这种方式存储它们,或者更好地使用基于json的数据库,如mongodb。。。Ofc我必须了解你所有的项目才能给你更好的建议,我不。。但我敢打赌你的解决方案是不必要的过度复杂。。想一想,你真的需要所有这些课程吗?还是因为你的老师告诉你这些课程更干净?因为扰流板警报它不会干净,如果你真的想自动化数据库,这对我来说意味着两件事:A)你试图重新发明轮子,而不是使用正确维护的库B)你咬得太多了。。再一次,如果我听起来很被动,我很抱歉,但我真的想帮助你。另外,eval()这个东西实际上无法工作,因为typescript是什么以及它是如何工作的。。你又咬得太多了,咬不下。。相信我,你所做的是非常低级的,typescript不是一种合适的语言(如果你可以的话),你最好尝试找到不同的解决方案。这会起作用,但我认为它也会完全违背拥有类的目的。。。(你也一样)