有没有办法在 TypeScript 中为属性设置私有(private) setter?
class Test
{
private _prop: string;
public get prop() : string
{
return this._prop;
}
private set prop(val: string)
{
//can put breakpoints here
this._prop = val;
}
}
编译器提示 getter 和 setter 的可见性不匹配。我知道我可以只设置支持字段,但是当设置值时我不能设置断点。
虽然我想用一个接口(interface)来隐藏setter,但是接口(interface)只能定义一个属性,而不能定义它是否有setter上的getter。
我是不是漏掉了什么?似乎没有任何理由不允许私有(private) setter ,生成的 JS 无论如何都不强制可见性,而且似乎比当前的替代方案更好。
我错过了什么吗?如果不是,是否有充分的理由不使用私有(private)二传手?
最佳答案
TypeScript 规范 (8.4.3) 说......
Accessors for the same member name must specify the same accessibility
所以你必须选择一个合适的替代方案。这里有两个选项供您选择:
您可以没有 setter ,这意味着只有 Test
类能够设置该属性。您可以在 this._prop =...
行上放置一个断点。
class Test
{
private _prop: string;
public get prop() : string
{
return this._prop;
}
doSomething() {
this._prop = 'I can set it!';
}
}
var test = new Test();
test._prop = 'I cannot!';
可能确保私有(private)访问导致类似于“通知属性更改”模式的东西可以实现的理想方法是拥有一对私有(private)获取/设置属性访问器和一个单独的公共(public)获取属性访问器。
您仍然需要小心有人稍后将直接调用添加到支持字段。您可以在该领域发挥创意,尝试降低这种可能性。
class Test
{
private _nameBackingField: string;
private get _name() : string
{
return this._nameBackingField;
}
private set _name(val: string)
{
this._nameBackingField = val;
// other actions... notify the property has changed etc
}
public get name(): string {
return this._name;
}
doSomething() {
this._name += 'Additional Stuff';
}
}
关于typescript - 私有(private)二传手 typescript ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27825350/