代码之家  ›  专栏  ›  技术社区  ›  Steve Staple

正在迁移到typescript。为什么我的功能不被认可?

  •  1
  • Steve Staple  · 技术社区  · 7 年前

    我正在尝试将一个正在工作的javascript项目迁移到typescript。 该项目使用NightWatch.js

    这是我的主考课:

    declare function require(path: string): any;
    
    import * as dotenv from "dotenv";
    import signinPage = require("../built/pages/signinPage.js");
    import instancesPage = require("../built/pages/instancesPage.js");
    dotenv.config();
    
    module.exports = {
        'User can sign in'(client) {
    
            console.log("Sign in as email: " + process.env.EMAIL);
    
            signinPage
                //   .navigate()
                .signin(process.env.EMAIL, process.env.PASSWORD);
    
            // give it time to load
    
            client.pause(5000);
    
            instancesPage.expect.element('@homepageWelcomeTitle').text.to.contain('Welcome to the CJDocs Home!');
    
            client.end();
        }
    }
    

    这是PaulObjor对象,包含冒犯函数:

      module.exports = {  
      signin: function(email, password) {
        return this
          .waitForElementVisible('@emailInput')
          .setValue('@emailInput', email)
          .setValue('@passwordInput', password)
          .waitForElementVisible('@signinButton')
          .click('@signinButton')
      },
      elements: {
        emailInput: {
          selector: 'input[type=email]'
        },
        passwordInput: {
          selector: 'input[name=password]'
        },
        signinButton: {
          selector: 'button[type=submit]'
        }
      }
    };
    

    当我运行这个(使用npm测试从终端运行)时,我得到一个错误:

    TypeError: signinPage.signin is not a function
    

    在我看来,signnPage.signin是一个函数。

    为什么它不认识到我的功能?

    1 回复  |  直到 7 年前
        1
  •  -1
  •   Flion    7 年前

    这段代码仍然是非常多的js/es5,而不是太多的ts。 尝试改变 import signinPage 进入之内 import * as signinPage . 也许这会有帮助。

    但实际上,我建议查找ES6/TS功能,如类。 所以请签字:

    export default class signinPage {
      signin(email, password) {
        return this
          .waitForElementVisible('@emailInput')
          .setValue('@emailInput', email)
          .setValue('@passwordInput', password)
          .waitForElementVisible('@signinButton')
          .click('@signinButton')
      }
      get elements() {
        return {
          emailInput: {
            selector: 'input[type=email]'
          },
          passwordInput: {
            selector: 'input[name=password]'
          },
          signinButton: {
            selector: 'button[type=submit]'
          }
        }
      }
    }
    

    然后将您的导入更改为 import singinPage from "../src/pages/signinPage"

    所以你从ts文件指向另一个ts文件,但你不需要.ts扩展名。