Javascript Angular类实例正在生产构建中提供对象实例

Javascript Angular类实例正在生产构建中提供对象实例,javascript,angular,typescript,angular8,Javascript,Angular,Typescript,Angular8,我使用的是角度8 在应用程序中,我有一个对象数组,用于在HTML中相应地呈现数据 public components = [ { type: "button", data: { label: "Click here" } }, { type: "description_box", data: { content: "Enter description&

我使用的是角度8

在应用程序中,我有一个对象数组,用于在HTML中相应地呈现数据

public components = [
  {
    type: "button",
    data: {
      label: "Click here"
    }
  },
  {
    type: "description_box",
    data: {
      content: "Enter description"
    }
  }
]
现在有两个按钮添加按钮添加描述框当用户单击按钮时,请求的对象被推送到
组件
数组中,该数组的处理方式与

onClick(component: string) {
  switch(component) {
    case 'button': data = new Button(); break;
    case 'description_box': data = new DescriptionBox(); break;
  }

  this.components.push({
    type: this.getTypeFromData(data),
    data: data
}

/**
 * spit class constructor name in lowercase underscored
 * Ex: DescriptionBox -> description_box
 */
private getTypeFromData(data) {
  const className = data.constructor.name.split(/(?=[A-Z])/);

  let componentType = '';
  for (const name of className) {
    componentType += name + '_';
  }

  return componentType.toLowerCase().slice(0, -1);
}
这两个班是一样的

components.ts

export class Button {
  label: string;
  color: {
    label: string;
    button: string;
    border: string;
  };
  link: string;
}

export class DescriptionBox {
  text = 'New Title';
}
这在本地开发中效果很好,但在生产构建中效果不如预期


在生产构建中,类实例给出的是
o
对象而不是类实例。

这是因为您的类被缩小了,所以占用的空间更少。i不必检查构造函数。name您可以用数据实例of description Box来检查它。

这是因为您的类被缩小了,所以占用的空间更少。i除了检查
constructor.name
之外,您可以用
描述框的数据实例来检查它。

另外
按钮的实例是空对象
o{}
而对于描述框,它是
o{text:“New Title”
。这是因为
按钮
类属性未初始化吗?否,该类已重命名为较短版本。将其命名为
o
如果我使用
数据实例of DescriptionBox
,它将返回布尔值,因此我必须为每个实例检查编写多个
If-else
语句。我进行了测试,上面的工作用于布尔检查。但是在
getTypeFromData
方法中,我从实例类型生成名称。有没有办法将instanceof name作为字符串获取?类名在缩小过程中丢失。如果你想要一些字符串,你可以尝试一些类似于
class Button{static name='Button';…}
的方法,然后找到这个字符串,比如
const str=[Button,Box,Anyting]。find(cl=>data instanceof cl)。name
另外
Button
类的实例是空对象
o{}
,而对于描述框,它是
o{text:“新标题”}
。这是因为
按钮
类属性未初始化吗?否,该类已重命名为较短版本。将其命名为
o
如果我使用
数据实例of DescriptionBox
,它将返回布尔值,因此我必须为每个实例检查编写多个
If-else
语句。我进行了测试,上面的工作用于布尔检查。但是在
getTypeFromData
方法中,我从实例类型生成名称。有没有办法将instanceof name作为字符串获取?类名在缩小过程中丢失。如果您想拥有一些字符串,可以尝试类似于
类按钮{static name='Button';…}
的方法,然后找到类似于
const str=[Button,Box,Anyting]的字符串。查找(cl=>cl的数据实例)。name