建议
从来没有一个示例(我能想到的)类getter函数需要引用它自己。如果它这样做,试图调用该函数会抛出too much recursion error。所以TypeScript编译器不应该允许这种情况发生。
用例
这将确保任何使用私有类成员并添加可公开访问的getter的人都不会意外地引用公共getter而不是私有成员(请参见下面的示例)。
它还可以确保,如果有人正在重构并希望将私有成员更改为公共成员,他们可以使用“Rename Symbol”进行更改,例如将_example
更改为example
,并且任何现有的get example()
都将引发错误。
示例
下列程式码会掷回错误:
class Example {
private _exampleProperty: string = "example";
public get exampleProperty(): string {
return this.exampleProperty; // Self-referential; should be this._exampleProperty
}
}
检查清单
我的建议符合以下准则:
- 这不会是对现有TypeScript/JavaScript代码的重大更改
- 我不知道这个?它可能会引发当前不存在的错误,但我想不出一个例子,这 * 不应该 * 是一个错误。*
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不基于表达式的类型发出不同JS的情况下实现
- 这不是运行时功能(例如,库功能、带有JavaScript输出的非ECMAScript语法等)
- 这个特性将与TypeScript's Design Goals的其余部分一致。
- 这与目标1一致:“静态识别可能是错误的构造.”
5条答案
按热度按时间qeeaahzv1#
getter可以像递归函数一样运行。我无法给出一个不傻的例子,但也许有人已经给出了:
jfewjypa2#
哦,这是一个很好的观点。也许只是错误时,函数 * 只 * 返回自己?这似乎是最常见的例子,无论如何,这个错误。
w1jd8yoj3#
这作为一个linter规则是否更有意义(并且是合理可实现的)?
getter可以像递归函数一样运行。我无法给出一个不傻的例子,但也许有人已经给出了:
如果只在递归调用不在条件内时引发错误,则可以避免此示例。
czq61nw14#
棉绒规则?
https://github.com/ajafff/tslint-consistent-codestyle/blob/master/docs/no-accessor-recursion.md的最大值
ca1c2owp5#
我想棘手的是getter是一个空函数,因此在不引用外部数据(全局变量、示例属性等)的情况下,您无法对终止条件进行编码。getter * 可以 * 在这个意义上是递归的,但它肯定不会是我如何实现的首选。
无论如何,这似乎更像是一个lint规则,而不是一个tsc错误。