为什么我不能在TypeScript类中声明局部变量和函数?

dan*_*wig 3 javascript typescript

在TypeScript中,如果没有编译器将其添加到原型中,我似乎无法在类中声明函数.例如:

class MyTypeScriptClass {
    // method, is added to prototype
    foo1(): void {
        alert('invoked foo1');
    }

    // private method also added to prototype
    private foo2(): void {
        alert('invoked foo2');
    }

    //// can I have a local function, without making it a private method?
    //function foo3() {
    //    alert('invoked foo3');
    //}
}
Run Code Online (Sandbox Code Playgroud)

以上编译如下:

var MyTypeScriptClass = (function () {
    function MyTypeScriptClass() { }
    MyTypeScriptClass.prototype.foo1 = function () {
        alert('invoked foo1');
    };
    MyTypeScriptClass.prototype.foo2 = function () {
        alert('invoked foo2');
    };
    return MyTypeScriptClass;
})();
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是可以编译为以下JavaScript的typescript:

var fvm = new FlasherViewModel2();
    var MyTypeScriptClass = (function () {
        function MyTypeScriptClass() { }
        MyTypeScriptClass.prototype.foo1 = function () {
            alert('invoked foo1');
        };
        MyTypeScriptClass.prototype.foo2 = function () {
            alert('invoked foo2');
        };
        function foo3() {
            alert('invoked foo3');
        }
        return MyTypeScriptClass;
    })();
Run Code Online (Sandbox Code Playgroud)

可以吗?

(作为旁注,我知道foo3不能从外部代码调用.我实际上会从类中的另一个方法调用foo3,例如,将函数传递给jQuery fadeOut.)

Rya*_*ugh 7

正如apsillers所提到的,private static可能就是你想要的.虽然它在当前版本中不受支持,但您将来可以private static在某个时刻拥有TypeScript成员(设计团队根据类似的反馈改变了对此的想法).