首页 文章

赛普拉斯自定义TypeScript命令不是一个功能

提问于
浏览
1

我在TypeScript中实现了一个自定义赛普拉斯:

// support/commands.js
const login = () => {
    console.log('Logging in...');
};

Cypress.Commands.add('login', login);

declare namespace Cypress {
    interface Chainable {
        login: typeof login;
    }
}

我试着用它来调用它:

describe('Login Scenario', () => {
    it('should allow a user to login', () => {
        cy.visit('/');
        cy.login();
    });
});

然而,似乎没有 Build 命令:

TypeError:cy.login不是函数

如果我用纯JavaScript编写命令(删除命名空间声明并将调用更新为 (cy as any).login(); ,它可以工作 .

我错过了什么?

1 回答

  • 5

    我通过在我的命令文件夹中添加index.d.ts文件来修复它 . 在这个文件中我添加了这样的东西:

    import { MyCustomType } from '../Types';
    
    declare global {
      namespace Cypress {
        interface Chainable<Subject = any> {
          login(): Chainable<MyCustomType>;
        }
      }
    }
    

    如果您不导入或导出任何内容,只需省略全局命名空间声明:

    declare namespace Cypress {
      interface Chainable<Subject = any> {
        login(): Chainable<MyCustomType>;
      }
    }
    

    请记住,它不适用于Typesciprt <2.3,因为必须支持默认的泛型类型 .

相关问题