私人二传手打字稿?
Private setter typescript?
有没有办法为 TypeScript 中的属性设置私有 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 的可见性不匹配。我知道我可以只设置支持字段,但是当设置值时我不能设置断点。
我想用一个接口来隐藏setter,但是接口只能定义一个属性,不能定义它是否有getter on setter。
我是不是漏掉了什么?似乎没有任何理由不允许私有设置器,生成的 JS 无论如何都不强制可见性,而且似乎比当前的替代方案更好。
我错过了什么吗?如果不是,是否有充分的理由不使用私人二传手?
TypeScript 规范 (8.4.3) 说...
Accessors for the same member name must specify the same accessibility
所以你必须选择一个合适的替代方案。这里有两个选项供您选择:
你可以没有 setter,这意味着只有 Test
class 可以设置 属性。您可以在行 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!';
可能确保私有访问结果类似于 "notify property changed" 模式可以实现的理想方法是拥有一对私有 get/set 属性 访问器,以及一个单独的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';
}
}
我也希望我们能有publicgetter和私人setter。在我们这样做之前,另一种处理方法是添加额外的 private getter 和 setter:
class Test {
_prop: string;
public get prop(): string {
return this._prop;
}
private get internalProp(): string {
return this.prop;
}
private set internalProp(value: string) {
this._prop = value;
}
private addToProp(valueToAdd: string): void {
this.internalProp += valueToAdd;
}
}
有没有办法为 TypeScript 中的属性设置私有 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 的可见性不匹配。我知道我可以只设置支持字段,但是当设置值时我不能设置断点。
我想用一个接口来隐藏setter,但是接口只能定义一个属性,不能定义它是否有getter on setter。
我是不是漏掉了什么?似乎没有任何理由不允许私有设置器,生成的 JS 无论如何都不强制可见性,而且似乎比当前的替代方案更好。
我错过了什么吗?如果不是,是否有充分的理由不使用私人二传手?
TypeScript 规范 (8.4.3) 说...
Accessors for the same member name must specify the same accessibility
所以你必须选择一个合适的替代方案。这里有两个选项供您选择:
你可以没有 setter,这意味着只有 Test
class 可以设置 属性。您可以在行 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!';
可能确保私有访问结果类似于 "notify property changed" 模式可以实现的理想方法是拥有一对私有 get/set 属性 访问器,以及一个单独的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';
}
}
我也希望我们能有publicgetter和私人setter。在我们这样做之前,另一种处理方法是添加额外的 private getter 和 setter:
class Test {
_prop: string;
public get prop(): string {
return this._prop;
}
private get internalProp(): string {
return this.prop;
}
private set internalProp(value: string) {
this._prop = value;
}
private addToProp(valueToAdd: string): void {
this.internalProp += valueToAdd;
}
}