eslint 成员排序陷阱 - 无论哪个声明先到都会导致错误

eslint member-ordering trap - whichever declaration comes first causes an error

我有这个代码:

export class RouteParamsService {
  private routeParamsChangeSource = new ReplaySubject<Params>() // lets call this line 1
  routeParamsChange$ = this.routeParamsChangeSource.asObservable() // lets call this line 2
  ... etc
}

如果我将第 1 行放在第 2 行之前,我会收到错误消息:

@typescript-eslint/member-ordering Member routeParamsChange$ should be declared before all private instance field definitions

如果我将第 2 行放在第 1 行之前,我会收到错误消息:

Property routeParamsChangeSource is used before its initialisation

我理解这两个错误以及为什么会出现这些错误。但是,是否有一条规则可以放宽规则,但只有当你落入这样的陷阱时才会放宽规则?我知道我可以做到 eslint-disable-line @typescript-eslint/member-ordering,但我不想每次遇到这个问题(我经常遇到这个问题)时都必须这样做。

我也不想制作 routeParamsChangeSource public。

有什么想法吗?谢谢

@typescript-eslint/member-orderinglint 规则当前不理解字段之间的依赖关系。

如您所知 - 这种依赖性会产生复杂的排序问题,社区中还没有人有足够的动力去解决这个问题。

您可以在此处查看问题跟踪:https://github.com/typescript-eslint/typescript-eslint/issues/2882

该项目欢迎贡献 - 如果这是一个对您很重要的问题。


至于实际的解决方法或修复。

禁用评论是一个很好的临时措施。

另一种选择是将依赖项移动到构造函数中:

export class RouteParamsService {
  private routeParamsChangeSource = new ReplaySubject<Params>();
  routeParamsChange$;

  constructor() {
    this.routeParamsChange$ = this.routeParamsChangeSource.asObservable();
  }
}