TypeScript 1.0不生成私有成员

时间:2014-04-15 09:00:23

标签: visual-studio-2012 typescript web-essentials

我正在使用带有TypeScript 1.0和web essentials 3.7的visual studio 2012。我在TypeScript文件中的类中声明了一些私有静态变量。但是当我保存这个文件时,我没有在JavaScript文件和运行时系统中看到这些成员抛出异常。

立即

enter image description here

早期系统用于生成这些属性。但最近我升级到TypeScript 1.0&现在我没有看到这些私有静态成员。

早些时候: enter image description here

2 个答案:

答案 0 :(得分: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 :(得分:-1)

如果您正确访问它,则不应抛出任何异常。未定义的成员,如

class A {
    private STATIC: string;
}

的值为undefined,与正常的Javascript:

一致
var something; // undefined

之前将其初始化为""的打字稿实际上是"不正确" (与类似语言相比)。它肯定只是打字稿猜测。如果你想保留这个,你需要做

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