我有一个打字稿类,我有几个变量的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个不同的属性。最好的方法是什么?最好不必在此文件之外创建新类
答案 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。