防止TypeScript中的关联数组访问

时间:2015-01-15 07:54:15

标签: 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

1 个答案:

答案 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

我提出了issue for this on GitHub