TypeScript: объект Enum не определен - PullRequest
0 голосов
/ 23 февраля 2019

Я создаю приложение с помощью 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 не определен» Я также пытаюсь найти ShapeType в конечном файле комплекта JavaScript, но я обнаружил, что нетShapeType тоже в файле комплекта.У меня нет проблем, когда я импортирую его в TS.

Код ниже - это код js.ChartDraw - это имя библиотеки, которое я определил в файле конфигурации моего веб-пакета.Все остальные функции работают нормально.Единственная проблема связана с

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 голосов
/ 24 февраля 2019

В конце концов я выяснил, в чем проблема.Первая проблема была из-за конст.Когда машинописный код преобразуется в JavaScript, enum преобразуется в объект, но если я добавлю ключевое слово const, он больше не будет объектом.Чтобы исправить это, я удалил const, как показано ниже:

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

Вторая проблема была в моем коде JavaScript.На первом этапе я забыл добавить имя библиотеки (ChartDraw) в ShapeType при вызове shapeFactory.createShape(ChartDraw.ShapeType.Ellipse)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...