TypeScript:未定义Enum对象

时间:2019-02-23 11:05:12

标签: javascript typescript webpack

我正在通过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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

最终,我发现了问题所在。 第一个问题是因为const。当打字稿代码转换为JavaScript时,枚举将转换为对象,但是如果我添加const关键字,它将不再是对象。因此,要解决此问题,我按如下所示删除了const:

export enum ShapeType {
    Actor,Ellipse,Border,Connector
}

第二个问题在我的JavaScript代码中。第一步,我忘了在调用shapeFactory.createShape(ChartDraw.ShapeType.Ellipse)

时将库名(ChartDraw)添加到ShapeType