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

define の呼び出し内に return を手動で追加することでこれを修正できますが、TS コンパイラによって JS が出力されているため、これは適切な回避策ではありません。

私は何か間違ったことをしていますか、それとも typescript のバグですか?

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 に答える