无法使用TypeScript和Require.JS引用对象

时间:2016-02-22 22:49:42

标签: javascript typescript requirejs amd

我有一个TypeScript项目。基本上我有一个名为myId.ts的文件:

export module MyModule {
    export class MyId {
        constructor() { ... }
        public compareTo(other: MyId): number { ... }
        public toString(): string { ... }
    }
}

我有tsconfig.json

{
    "compilerOptions": {
        "target": "es5",
        "noImplicitAny": true,
        "removeComments": false,
        "preserveConstEnums": true,
        "sourceMap": false,
        "module": "amd",
        "outDir": "./out"
    },
    "files": [
        "myId.ts"
    ]
}

我使用这个命令编译这个东西:

tsc --project .

当前目录包含配置文件ad,也包含源文件。

好吧,当编译一切都很好时,我得到out/myId.js

define(["require", "exports"], function (require, exports) {
    var MyModule;
    (function (MyModule) {
        var MyId = (function () {
            function MyId() { ... }
            MyId.prototype.compareTo = function (other) { ... };
            MyId.prototype.toString = function () { ... };
        })();
        MyModule.MyId = MyId;
    })(MyModule = exports.MyModule || (exports.MyModule = {}));
});

引用MyId

的问题

好吧,我想在网页中使用它并使用JavaScript调用它,因此通过关注Require.JS guidelines,我创建了我的网页:

<html>
  <head>
    <meta charset="UTF-8">
    <title>EVT Example - Minimal</title>
    <script src="./require.js" type="text/javascript" data-main="./myId"></script>
  </head>
  <body></body>
</html>

但是,当我打开检查器(F12工具)并尝试引用MyModule.MyId时,找不到任何东西!我如何参考我的类型?

一切都很好

检查员告诉我myId.js实际上已成功加载。因此,Require.JS没有加载脚本这一事实并不是问题。

怎么办?

1 个答案:

答案 0 :(得分:2)

  

当我打开检查器(F12工具)并尝试引用MyModule.MyId时,找不到任何东西!我如何引用我的类型

模块不是全局的,而是一件好事。因此,如果您输入MyModule.MyId,则不会发生任何事情。

如果你想在控制台上访问它,可以把它放在窗口上,例如:

export module MyModule {
    export class MyId {
        constructor() { ... }
        public compareTo(other: MyId): number { ... }
        public toString(): string { ... }
    }
}
(window as any).MyModule = MyModule;

然后你可以在控制台中执行MyModule.MyId。当然,只有一个全局空间并且开始污染它是一个糟糕的想法(杀死了模块化可维护JavaScript的目的)。它可以用于测试