防止 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