【问题标题】:Typescript AMD Module not returning anythingTypescript AMD 模块不返回任何内容
【发布时间】:2013-04-06 06:59:37
【问题描述】:

我正在“log.ts”文件中导出一个简单的函数:

export function message(s : string) {
    console.log(s);
}

这是由同一目录中的文件(“MyController.ts”)导入的:

import log = module("./log");
class MyController {

    a : string = "aaa";

    constructor () {
        log.message("hello world");
    }
}

编译后得到如下JS:

define(["require", "exports", "./log"], function(require, exports, __log__) {
    var log = __log__;

    var MyController = (function () {
        function MyController() {
            this.a = "aaa";
            log.message("hello world");
        }
        return MyController;
    })();    
})
//@ sourceMappingURL=MyController.js.map

这个定义函数应该返回 MyController。因为没有,所以这个 sn-p 内部的回调没有得到任何控制器参数:

   require(["MyController"], function (controller) {
                    theRoute.controller = controller;
                    defer.resolve();
                    $rootScope.$apply();
                });

我可以通过在定义调用中手动添加返回来解决这个问题,但这不是一个好的解决方法,因为 JS 是由 TS 编译器输出的。

是我做错了什么还是打字稿中的错误?

【问题讨论】:

    标签: requirejs typescript amd


    【解决方案1】:

    你应该写:

    import log = module("./log");
    export class MyController { // <--- 'export'
        a : string = "aaa";
        constructor () {
            log.message("hello world");
        }
    }
    

    还有:

       require(["MyController"], function (controller) {
         theRoute.controller = new controller.MyController(); // <--
         defer.resolve();
         $rootScope.$apply();
       });
    

    从 0.9.x 开始,您将能够在 .ts 文件的底部写入 export = MyController; 以使该类成为顶级导出对象。

    【讨论】:

    • @RyanCavanaugh 这是 TS 0.9 中模块的唯一变化吗?这是我在规范中唯一能注意到的。如果您在博客中介绍 0.9 中引入的模块更改,将不胜感激
    • @RyanCavanaugh 内部模块在 0.8 和 0.9 之间似乎是一样的
    • 谢谢。我很困惑为什么我的“定义” ts 类依赖项被作为对象而不是类(或 ES5 函数)传递给我的 require 函数。现在我看到每个依赖项都包装在一个对象中,例如,我必须执行 arg1.MyClass。
    猜你喜欢
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2015-12-27
    • 2020-04-27
    • 2019-04-06
    • 2012-02-15
    相关资源
    最近更新 更多