Можно написать этот машинописный текст без использования команды экспорта

Изучение TypeScript и простой сервис Angular:

interface IBaConfigFactory {
    dateTimeNow: Date; 
}

export class BaConfigFactory implements IBaConfigFactory {
    dateTimeNow: Date;

    constructor() { 
        this.dateTimeNow = new Date();
    }
}

angular
    .module("blogApp")
    .service("BaConfigFactory", BaConfigFactory);

Но браузер жалуется:

baConfigService.ts:6 Uncaught ReferenceError: экспорт не определен (анонимная функция) @ baConfigService.ts:6 app.ts:48

Из того, что я узнаю, мне понадобится что-то вроде Webpack или CommonJS, чтобы браузер понимал экспорт. Можно ли переписать это так, чтобы я не накручивал команду экспорта? Сосредоточенность на изучении одной вещи за раз.


person Hoppe    schedule 19.04.2016    source источник
comment
Я не знаю, есть ли способ сделать это без использования export. Модульную систему легко включить в VS2015. Параметры находятся в свойствах проекта в разделе TypeScript Build › Module system.   -  person Chris Bier    schedule 19.04.2016
comment
Мне пришлось включить require.js в свой проект. Настройте мой tsconfig.json на es6 и используйте AMD в качестве системы сборки модулей. Это помогло   -  person Hoppe    schedule 19.04.2016


Ответы (1)


Вам не нужен экспорт, если вы не загружаете свой файл, используя систему модулей, и если вы не размещаете свой код в файле module/namepsace.

Например, это должно работать нормально:

class MyClass {
    private x: number;

    constructor(x: number) {
        this.x = x;
    }

    getX(): number {
        return this.x;
    }

    doit(y: number): number {
        return this.x * y;
    }
}

function echo(value: any): any {
    return value;
}

(образец.ц)

<html>
    <head>
        <script src="example.js"></script>
        <script>
            var a1 = new MyClass(10),
                a2 = new MyClass(43);

            console.log(echo("hey there!"));
            console.log(a1.doit(a2.getX()));
        </script>
    </head>
    <body></body>
</html>

Однако использование export вполне допустимо, потому что оно не должно появляться в скомпилированном js (только не используйте -m или --module в параметры компилятора).

Например, это:

module MyModule {
    export class MyClass {
        private x: number;

        constructor(x: number) {
            this.x = x;
        }

        getX(): number {
            return this.x;
        }

        doit(y: number): number {
            return this.x * y;
        }
    }

    export function echo(value: any): any {
        return value;
    }
}

Компилируется в это:

var MyModule;
(function (MyModule) {
    var MyClass = (function () {
        function MyClass(x) {
            this.x = x;
        }
        MyClass.prototype.getX = function () {
            return this.x;
        };
        MyClass.prototype.doit = function (y) {
            return this.x * y;
        };
        return MyClass;
    }());
    MyModule.MyClass = MyClass;
    function echo(value) {
        return value;
    }
    MyModule.echo = echo;
})(MyModule || (MyModule = {}));

(Code in Playground)

И вы заметите, что в скомпилированном js нет export.
Затем вы просто:

<html>
    <head>
        <script src="example.js"></script>
        <script>
            var a1 = new MyModule.MyClass(10),
                a2 = new MyModule.MyClass(43);

            console.log(MyModule.echo("hey there!"));
            console.log(a1.doit(a2.getX()));
        </script>
    </head>
    <body></body>
</html>
person Nitzan Tomer    schedule 19.04.2016