2013-04-01 51 views
4

TypeScript是不是使用类的揭示模块模式?我期望这段代码有不同的结果。TypeScript是不是使用类的揭示模块模式?

class Test { 

    private privateProperty: any; 

    public publicProperty: any;  
} 

产生这样的:

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

我希望这样的事情:

var test = (function(){ 
    var privateProperty; 
    var publicProperty; 

    return { 
     publicProperty: publicProperty; 
    }; 

})(); 
+0

不,不是。 'private' /'public'检查只是由编译器完成的,并不影响生成的代码。 (但这只是一个猜测而已'':)')尽管如此,你的第二个例子并不正确。它甚至不会返回一个函数。 – Ryan

+1

'module'的codegen与您发布的内容最为相似 –

+0

@minitech:不,它不返回函数,它返回对象字面量。它被称为显示模块模式。看到这里:http://stackoverflow.com/questions/5647258/how-to-use-revealing-module-pattern-in-javascript – epitka

回答

8

RMP不适合基于类的设计。 module你想要做什么:

module myMod { 
    var x = 31; 
    export var y = x + 15; 
} 

生成:

var myMod; 
(function (myMod) { 
    var x = 31; 
    myMod.y = x + 15; 
})(myMod || (myMod = {})); 

突出特点在这里:

  • 私人表演与封闭拍摄
  • 公共成员是可见的的自己的属性对象
  • 该对象创建于IIFE
+0

我认为打字稿中的“class”与我认为c#中的一个类相关,意思是私人和公共成员等,而模块更像是一个命名空间 – epitka

+0

这是正确的 –