1

我正在“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。因为它没有,所以这个片段中的回调没有得到控制器参数的任何东西:

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

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

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

4

1 回答 1

3

你应该写:

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 开始,您将能够export = MyController;在 .ts 文件的底部编写以使该类成为顶级导出对象。

于 2013-04-05T22:59:37.947 回答