我正在通过TypeScript创建一个应用程序,并使用WebPack进行翻译和捆绑。 我正在纯JavaScript网站中使用此应用程序的最终结果。在此应用程序中,我定义了一个枚举,如下所示:
export const enum ShapeType {
Actor,Ellipse,Border,Connector
}
我也将其导出为:
export { ShapeType } from "./shape/shape.type";
但是当我尝试使用它时:
var createdShape = new shapeFactory.createShape(ShapeType.Ellipse);
它不会创建形状,当我调试时会看到此错误:“未定义ShapeType” 我也尝试在最终的JavaScript捆绑文件中找到ShapeType,但我发现捆绑文件中也没有ShapeType。 将其导入TS时没有问题。
下面的代码是js代码。 ChartDraw是我在Webpack配置文件中定义的库名。所有其他功能都可以正常工作。唯一的问题是
var aa = shapeFactory.createShape(ChartDraw.ShapeType.Ellipse);
因为未定义ShapeType。
var svg = new ChartDraw.Svg("drawing");
var shapeFactory = new ChartDraw.ShapeFactory(svg);
var ob1 = null;
var ob2 = null;
//aa.draw();
var cc = new ChartDraw.Connector(svg);
var bb = new ChartDraw.MouseReader();
bb.setExportFunction(info => {
var aa = shapeFactory.createShape(ChartDraw.ShapeType.Ellipse);
aa.rectangularPosition = info;
aa.draw();
if (ob1 == null)
ob1 = aa;
else {
ob2 = info;
cc.beginObject = ob1;
cc.endObject = aa;
cc.draw();
}
});
下面的代码是我导入ShapeType的地方:
import { ShapeType } from "./shape.type";
import { Actor } from "./actor";
import { Svg } from "../svg";
import { Shape } from "./shape";
import { Ellipse } from "./ellipse";
export class ShapeFactory {
private svg: Svg;
constructor(svg: Svg) {
this.svg = svg;
}
public createShape(shape: ShapeType):Shape {
switch (shape) {
case ShapeType.Actor:
let actor = new Actor(this.svg);
return actor;
case ShapeType.Ellipse:
let ell = new Ellipse(this.svg);
return ell;
}
}
}
答案 0 :(得分:0)
最终,我发现了问题所在。 第一个问题是因为const。当打字稿代码转换为JavaScript时,枚举将转换为对象,但是如果我添加const关键字,它将不再是对象。因此,要解决此问题,我按如下所示删除了const:
export enum ShapeType {
Actor,Ellipse,Border,Connector
}
第二个问题在我的JavaScript代码中。第一步,我忘了在调用shapeFactory.createShape(ChartDraw.ShapeType.Ellipse)