防止 TypeScript 中的关联数组访问
Protect against associative array access in TypeScript
有没有办法告诉 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
似乎存在不一致,尽管结果可能是设计使然。
在下面的示例中,编译器确定了变量的类型 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
我提出了一个issue for this on GitHub。
有没有办法告诉 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
似乎存在不一致,尽管结果可能是设计使然。
在下面的示例中,编译器确定了变量的类型 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
我提出了一个issue for this on GitHub。