2014-04-15 50 views
0

我正在使用Visual Studio 2012與TypeScript 1.0和Web Essentials 3.7。我在TypeScript文件的類中聲明瞭一些私有靜態變量。但是當我保存這個文件時,我沒有在JavaScript文件中看到這些成員,並且在運行時系統拋出異常。TypeScript 1.0不生成私有成員

現在

enter image description here

此前系統的使用,以產生這些財產。但最近我升級到TypeScript 1.0 &現在我沒有看到這些私人靜態成員。

早些時候: enter image description here

+0

編譯的JS似乎對我有效。你爲什麼不再看到他們? –

+0

@JohannesKlauß:我添加了兩張圖片。第一個在運行時沒有私有變量&throws錯誤,而第二個圖像顯示來自先前版本(舊版本typeScript)的快照。我不知道你爲什麼說編譯版本對你看起來有效。它假設包含私有變量聲明? – SharpCoder

回答

2

它並不需要明確提及他們在編譯的JavaScript,因爲它是一個動態的語言,它允許當第一次使用它們要添加的屬性,例如,當您設置值...

因爲該屬性是靜態的,所以應該通過類名來訪問它。在下面的例子中,User._name

class User { 
    private static _name: string; 

    static setName(name: string) { 
     User._name = name; 
    } 

    static getName() { 
     return User._name; 
    } 
} 

User.setName('Steve'); 

alert(User.getName()); // 'Steve' 

正如我所說,沒有必要「設立」的事實,會有一個_name屬性,因爲JavaScript沒有要求。這裏是從上面的例子輸出:

var User = (function() { 
    function User() { 
    } 
    User.setName = function (name) { 
     User._name = name; // this adds a property if it doesn't exist 
    }; 

    User.getName = function() { 
     return User._name; 
    }; 
    return User; 
})(); 

User.setName('Steve'); 

alert(User.getName()); 

如果你想讓它出現,你需要在一開始就分配一個值:

private static _name = ''; 
-1

不應有任何異常拋出,給你正確訪問它。像

class A { 
    private STATIC: string; 
} 

未定義的成員有undefined一個值,該值與常規的JavaScript是一致的:

var something; // undefined 

打字稿以前它初始化爲""實際上是「不正確」(相比同類的語言)。這絕對不是Typescript猜測。如果你想保留這個,你需要做

class A { 
    private STATIC: string = ""; 
}