我正在使用Visual Studio 2012與TypeScript 1.0和Web Essentials 3.7。我在TypeScript文件的類中聲明瞭一些私有靜態變量。但是當我保存這個文件時,我沒有在JavaScript文件中看到這些成員,並且在運行時系統拋出異常。TypeScript 1.0不生成私有成員
現在
此前系統的使用,以產生這些財產。但最近我升級到TypeScript 1.0 &現在我沒有看到這些私人靜態成員。
早些時候:
我正在使用Visual Studio 2012與TypeScript 1.0和Web Essentials 3.7。我在TypeScript文件的類中聲明瞭一些私有靜態變量。但是當我保存這個文件時,我沒有在JavaScript文件中看到這些成員,並且在運行時系統拋出異常。TypeScript 1.0不生成私有成員
現在
此前系統的使用,以產生這些財產。但最近我升級到TypeScript 1.0 &現在我沒有看到這些私人靜態成員。
早些時候:
它並不需要明確提及他們在編譯的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 = '';
不應有任何異常拋出,給你正確訪問它。像
class A {
private STATIC: string;
}
未定義的成員有undefined
一個值,該值與常規的JavaScript是一致的:
var something; // undefined
打字稿以前它初始化爲""
實際上是「不正確」(相比同類的語言)。這絕對不是Typescript猜測。如果你想保留這個,你需要做
class A {
private STATIC: string = "";
}
編譯的JS似乎對我有效。你爲什麼不再看到他們? –
@JohannesKlauß:我添加了兩張圖片。第一個在運行時沒有私有變量&throws錯誤,而第二個圖像顯示來自先前版本(舊版本typeScript)的快照。我不知道你爲什麼說編譯版本對你看起來有效。它假設包含私有變量聲明? – SharpCoder