使用getter setter

时间:2017-10-31 17:24:55

标签: typescript

我有一个打字稿类,我有几个变量的getter和setter方法。例如:

export class TestService {
    private created: boolean;

        public getCreated(): boolean {
        return this.created;
    }

    public setCreated(created: boolean): void {
        this.created= created;
    }

}

我想在此类中再添加一个变量,并为此添加一个getter setter。然而,这个变量不是一个简单的字符串/布尔基元,但需要某种JSON,它可以有自己的属性(比如颜色,大小,形状),可以设置,我不想为这3个属性增加3个额外的变量使用相应的getter setter方法,但只有一个JSON可以容纳3个不同的属性。最好的方法是什么?最好不必在此文件之外创建新类

2 个答案:

答案 0 :(得分:0)

JSON是一种数据传输格式。

了解TypeScript接口,定义一个,并添加类型为服务接口的字段。

你应该在TypeScript中避免使用这样的getter和setter。这是一个Java习惯用法,但TypeScript可以根据需要定义常规属性的getter和setter。

您的服务应缩减为

export interface Foo {
  bar: string;
  baz: number;
  wiz: boolean;
}

export class TestService {
  created: boolean;
  foo: Foo; 
}

如果稍后您意识到需要拦截created属性的每个更改,那么您可以更改为以下代码,而无需更改此服务的客户端代码:

export class TestService {
  private _created: boolean;
  foo: Foo; 

  get created(): boolean {
    return this._created;
  }

  set created(c: boolean) {
    console.log('setting created...');
    this._created = c;
  }
}

答案 1 :(得分:0)

您可以创建一个匹配这些属性的界面:

interface Item {
  color: string;
  size: string;
  shape: string;
}

您是否在单独的文件中使用它取决于您,但随后您可以使用它:

private item: Item;
public getItem(): Item {
  return this.item;
}
public setItem(item: Item) {
  this.item = item;
}

您还可以执行内联类型对象文字:

private item: { color: string, size: string, name: string };

然而,这是更冗长,更容易出错,因为如果你在一个地方更新类型,你可能需要在任何地方更新它。

不支持:如果需要,可以使用TypeScript Accessors作为getter / setter。