首页 > 解决方案 > Typescript + Cypress 预期 X 参数,但使用链式方法得到 X-1 错误 2551

问题描述

我正在尝试在使用赛普拉斯自定义命令时消除 Typescript 中的错误 2551(“预期 2 个参数,但得到 1 个”)。现在我有:

declare global {
  namespace Cypress {
    interface Chainable<Subject> {
      randomSubset(arr, sampleSize): Chainable<Subject>
    }
  }
}
Cypress.Commands.add('randomSubset', {prevSubject: true}, (arr, sampleSize){...}

但是,当我尝试使用它时:

cy.get('li').randomSubset(0.1).each(...);

我收到上述错误。如何让 Typescript 编译器识别出第一个参数来自链式函数返回,而不是显式传递?

编辑:请注意,代码运行正确,只是试图解决 Typescript 警告

标签: typescriptcypresschaining

解决方案


所以这个问题是基于对Cypress.Commands.add()函数定义的误解。如果prevSubject: true,则Cypress.Commands.add()函数将第三个参数作为主题,并将任何后续参数作为自定义函数的选项。

因此,为了解决这个问题,我更正了类型声明:

declare global {
  namespace Cypress {
    interface Chainable<Subject> {
      randomSubset(sampleSize): Chainable<Subject>
    }
  }
}

并保持其他一切不变。这消除了错误。


推荐阅读