与AMD和导出模块不匹配的匿名define()模块打字稿

时间:2016-01-21 17:23:00

标签: typescript visual-studio-2013 requirejs amd

我正在尝试使用Typescript(1.7.5)和AMD模块创建应用程序。我添加了对r.js和requirejs.js的引用。下面是我的TS代码:

export module TestNs {
    export class TestClass {
        public fn(): void{
            debugger;
        }
    }
}

这是我的aspx页面调用“fn()”:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TypeScriptPage.aspx.cs" Inherits="WebApplication1.TypeScriptPage" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div id="div1">
        </div>
        <script src="Scripts/r.js"></script>
        <script src="Scripts/require.js"></script>
        <script src="Scripts/TypeScriptBegin.js"></script>
        <script type="text/javascript">

            var testObj = new TestNs.TestClass();
            testObj.fn();

        </script>
    </form>
</body>
</html>

但我收到了以下错误:

TestNS未定义

“JavaScript运行时错误:不匹配的匿名define()模块:function(require,exports)”

但是当我删除 “导出” 关键字时,上面的代码运行正常。我是Typescript和requirejs的新手。任何人都可以指出我做错了什么以及如何解决这个问题?

提前感谢。

2 个答案:

答案 0 :(得分:1)

我认为您应该删除以下行:

export module TestNs

脚本类型中的每个文件都是一个模块,因此您不需要该部分。

编辑

然后在您的javascript删除脚本标记中加载您的类并使用以下内容:

var moduleName = 'Scripts/TypeScriptBegin';
require([moduleName], function(TestNs){
            var testObj = new TestNs.TestClass();
            testObj.fn();
})

希望这会有所帮助。

答案 1 :(得分:0)

感谢Amid,我找到了答案(未来任何身体需要):

TypeScriptBegin.ts

export module TestNs {
    export class TestClass {
        public fn(): void {
            //var v = new TSTest.TSTest.TestClass();
            debugger;
            //v.fn();
        }
    }
}

从aspx调用:

<script src="Scripts/r.js"></script>
        <script src="Scripts/require.js"></script>
        <script type="text/javascript">

            var moduleName = 'Scripts/TypeScriptBegin';
            require([moduleName], function (TestMod) {
                var testObj = new TestMod.TestNs.TestClass();
                testObj.call();
            });

        </script>