首页 > 解决方案 > 如何在 Javascript 文件中导入 Typescript 文件并在使用前解释其内容?

问题描述

我正在用 Typescript 编写一个 Node 应用程序,但我的 Cucumber 测试是用 Javascript 编写的。我的问题:如果我有一个 Typescript 文件:

import { Request, Response } from "express";
import checkCredentials from "./components/member/check-member-credentials";
import findMemberByEmail from "./components/member/find-member-by-email";

export default async (req: Request, res: Response) => {
  const memberByEmail = await findMemberByEmail(req.body.password);
  if (memberByEmail.error) {
    return res.status(401).json({ message: "not found" });
  }

  const isMatch = await checkCredentials(
    memberByEmail.member.password,
    req.body.password,
  );
  if (isMatch) {
    return res.status(200).json({ message: "logged in" });
  }
  return res.status(401).json({ message: "not auth" });
};

我正在尝试将其导入 Cucumber 测试的上下文文件中:

require('../../../../src/controllers/login.ts');

我得到典型的 js 错误:

import { Request, Response } from "express";
       ^
SyntaxError: Unexpected token {

我尝试使用一个库typescript-require并在导入之前需要它(如其文档中所示):

require('typescript-require');
const login = require("../../../../src/controllers/login.ts");

但我仍然收到错误:

> NODE_ENV=development ./node_modules/.bin/cucumber-js test

src/controllers/components/member/check-member-credentials.ts(1,25): error TS2307: Cannot find module 'bcryptjs'.
src/controllers/components/member/check-member-credentials.ts(4,3): error TS2304: Cannot find name 'Promise'.
src/controllers/components/member/find-member-by-email.ts(1,16): error TS2307: Cannot find module '../../../db/models/index.js'.
src/controllers/components/member/find-member-by-email.ts(4,2): error TS2304: Cannot find name 'Promise'.
src/controllers/login-test.ts(1,35): error TS2307: Cannot find module 'express'.
src/controllers/login-test.ts(5,16): error TS1057: An async function or method must have a valid awaitable return type.
src/controllers/login-test.ts(11,25): error TS2346: Supplied parameters do not match any signature of call target.
src/controllers/login-test.ts(13,22): error TS1009: Trailing comma not allowed.
Fatal Error. Unable to compile TypeScript file. Exiting.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! my-basic-fit-v2@1.0.0 e2etest: `NODE_ENV=development ./node_modules/.bin/cucumber-js test`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the my-basic-fit-v2@1.0.0 e2etest script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/ali.atrash/.npm/_logs/2019-07-08T14_53_57_742Z-debug.log

还有其他解决方案吗?

标签: node.jstypescript

解决方案


推荐阅读