有没有办法告诉TypeScript编译器不允许通过对象映射非法访问私有变量?
例如:
class Thing {
private id: number;
constructor() {
this.id = 1
}
}
var thing = new Thing()
alert(thing["id"]); // I want this to throw a compiler error
答案 0 :(得分:1)
似乎存在不一致,尽管可能是设计上的。
在下面的示例中,编译器确定变量b
的类型,但忽略它是私有的事实。为了保持一致,它应该:
显然,在你的情况下,你是在第二个选项之后。
class Example {
private private: number;
public public: number;
constructor() {
this.private = 1
}
}
var example = new Example()
var a = example.private; // Error
var b = example["private"]; // number
var c = example["other"]; // any
var d = example["public"]; // number