Javascript 可以在不使用exports命令的情况下编写此类型脚本

Javascript 可以在不使用exports命令的情况下编写此类型脚本,javascript,angularjs,typescript,visual-studio-2015,typescript1.8,Javascript,Angularjs,Typescript,Visual Studio 2015,Typescript1.8,学习打字脚本并提供简单的角度服务: interface IBaConfigFactory { dateTimeNow: Date; } export class BaConfigFactory implements IBaConfigFactory { dateTimeNow: Date; constructor() { this.dateTimeNow = new Date(); } } angular .module("blo

学习打字脚本并提供简单的角度服务:

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未捕获引用错误:未定义导出(匿名函数)@baConfigService.ts:6 app.ts:48


据我所知,我需要像Webpack或CommonJS这样的东西来让浏览器理解导出。是否可以重写此命令,这样我就不会得到导出命令?一次只学习一件事。

如果不使用模块系统加载文件,也不将代码放在模块/名称空间中,则不需要导出

例如,这应该可以很好地工作:

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;
}
(样本号:ts)

编译成以下格式:

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 = {}));
()

您会注意到编译的js中没有导出 然后你简单地:

<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>

var a1=新的MyModule.MyClass(10),
a2=新的MyModule.MyClass(43);
log(MyModule.echo(“你好!”);
log(a1.doit(a2.getX());

我不知道是否有不使用
导出
的方法可以做到这一点。很容易将模块系统与VS2015结合起来。选项位于TypeScript Build>Module system下的项目属性中。我必须在项目中包含require.js。将我的tsconfig.json设置为目标es6,并将AMD用作模块构建系统。这就成功了
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 = {}));
<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>