SonarLint 说我应该删除或重命名正在使用的参数

SonarLint says I should remove or rename the parameter being used

Sonar lint 说:

Remove the unused function parameter "customParams" or rename it to "_customParams" to make intention explicit.

但是,“getNextUrl”方法中使用了“customParams”参数,我做错了什么?

class Pagination {
  private readonly maxPage: number

  constructor (
    private readonly data: Array<{}>,
    private readonly currentPage: number,
    private readonly limit: number,
    private readonly count: number,
    private readonly urlRoute: string,
    private readonly customParams: {} = {}
  ) {
    this.maxPage = Math.ceil(count / limit)
  }

  private getNextUrl (): string | null {
    if (this.currentPage >= this.maxPage) {
      return null
    }
    const query = toQueryString({
      page: this.currentPage + 1,
      limit: this.limit,
      ...this.customParams
    })
    return getUrl(this.urlRoute) + '?' + query
  }

我认为这意味着您在构造函数中定义了它,但从不将某些内容传递给 customParams 的 Pagination() 构造函数,因此您允许 customParams 像这样发送:

const paginator = new Pagination(
    [{}], //    private readonly data: Array<{}>,
    0, // private readonly currentPage: number,
    100, // private readonly limit: number,
    87, // private readonly count: number,
    '/pages', // private readonly urlRoute: string,
    { someCustom: 3000 }, // private readonly customParams: {} = {}
  );

可以填写 customParams,但在您的代码中您实际上没有提供任何内容... customParams 仅定义为 {},这就是您启动它的方式。如果还没有人使用 customParams,为什么还要定义它呢? (YAGNI = 你不需要它)。

也许实际使用 customParams 或像使用 maxPage 一样将其设置在文件顶部,或者根本不包含它。

如果你要 运行 cmd + shift + f (在 Mac VS-Code/Sublime/Atom/etc 你的代码编辑器中)你可以搜索对于 Pagination class 的所有用法。目前似乎没有用例(实际定义 customParams 即构造函数中传递的第 6 个参数的动态和硬编码都没有。

此外,在我们讨论 code-styling 时,一些 linter 会指责您没有使用 named params 接受所有潜在可选参数的单个对象参数的概念(您可能有一个4+ 参数的长列表)因为该策略更容易记住参数的顺序。软件的用户很难记住他们可以为 customParams 传递第 6 个参数(特别是如果它是可选的)。因此,作为一个潜在的改进,尝试定义具有许多参数(通常超过 3 个)的函数,其中只有一个参数是一个对象并且可以采用可选参数。


interface PaginationOptions {
 data: Array<{}>,
 currentPage: number,
 limit: number,
 count: number,
 urlRoute: string,
 customParams?: Record<string, any>
}

constructor({ data, currentPage, limit, count, urlRoute, customParams = {} }: PaginationOptions)