TypeScript:无法在IIFE中定义类

时间:2015-04-29 08:13:55

标签: angularjs typescript

我想使用TypeScript在IIFE中定义一个类并不断收到错误class can be defined either in a module or a file。下面的代码不起作用。

(function(){
    // Error here
    class Person {

    }
})()

我需要这样做的原因是因为我不想暴露任何全局变量,甚至不是模块。你可能想知道为什么,因为我会以下面的方式将它们添加到角度模块

(function(){
    angular.module('app').controller('HomeController', HomeController);
    // error here
    class HomeController {
    }
})();

1 个答案:

答案 0 :(得分:4)

创建课程时,它会为您生成IIFE:

班级:

class Example {

}

JavaScript中的结果:

var Example = (function () {
    function Example() {
    }
    return Example;
})();

如果您希望将课程保留在全局范围之外,可以使用模块:

module Stack {
    export class Example {

    }

    export class Overflow {

    }
}

只有Stack模块出现在全局范围内。

var Stack;
(function (Stack) {
    var Example = (function () {
        function Example() {
        }
        return Example;
    })();
    Stack.Example = Example;
    var Overflow = (function () {
        function Overflow() {
        }
        return Overflow;
    })();
    Stack.Overflow = Overflow;
})(Stack || (Stack = {}));

如果您想更进一步,可以使用外部模块 - 当您这样做时,您的所有类或模块都不会添加到全局范围。