TypeScript Getter Setter 的重复声明

5
我正在尝试为TypeScript中的一个字段创建getter和setter。
searchFilter: string;

get searchFilter(): string {
  return this.searchFilter;
}

set searchFilter(value: string) {
  this.searchFilter = value;
}

这会导致错误:
Duplicate identifier 'searchFilter'.

我正在一个Angular项目中使用TypeScript。

@angular/cdk: 6.0.1
@angular/cli: 1.7.4
typescript: 2.5.3
1个回答

10

如果您使用了与getter或setter相同名称的属性,则无法拥有该属性。

因此,创建另一个私有属性(_searchFilter)来存储本地状态。

private _searchFilter: string;

get searchFilter(): string {
  return this._searchFilter;
}

set searchFilter(value: string) {
  this._searchFilter = value;
}

3
不,这只是一个惯例。 - yurzui
2
代码检查器可能会警告您使用“_”。 - pronebird
2
@sander 这并不会使变量私有化,需要注意的是这违反了 Angular 指南 中的约定。 - Standaa - Remember Monica
1
使用 _ 不是一种约定,而是一种不好的实践。所以这个方法可以工作,但并不是一个真正的解决方案。 - Julius Koronci
@JuliusKoronci 如果这不是一种惯例,对你来说这是一种不好的做法,并不意味着它对所有人都是一种不好的做法。看一下Angular材料源代码 https://github.com/angular/components/blob/20019655dfdab44901590643bac72d955f1dff1c/src/material/table/table-data-source.ts#L85-L90 - yurzui
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接