node.js - NodeJS 如何将 JS 文件导入 TypeScript

标签 node.js typescript import loopbackjs

我是 TypeScript 的新手。我目前正在学习使用 Typescript 语言的 NodeJS Loopback 4 框架。我的问题是如何将在 JS 文件中导出的一些函数、类导入到我的 TS 文件中。搜索了几种方法后,但它仍然对我不起作用。 这是示例:

  // /src/index.ts
    import {plus} from './lib/test';

    console.log(plus(1,2));

// /src/lib/test.js
    export function plus(x, y) {
      return x + y;
    }

我也尝试像这样使用定义 typescript

// /src/lib/test.d.ts
export declare function plus(x: number, y: number): number;

但是在index.ts文件中引入这个函数时仍然报错

Error: Cannot find module './lib/test' at Function.Module._resolveFilename (module.js:543:15)

最佳答案

看起来 tsconfig.json 没有启用“allowJs”,因为它导出了声明。

您是否有理由不希望它成为 typescript 文件?如果您将 test.js 更改为 test.ts,通过将其设为 .ts 应该允许它在您的索引文件中被识别。

更新

到此为止的完整聊天记录可以找到here . 用于测试的存储库找到 here

好的,就像@maaz-syed-adeeb 提到的那样简单的解决方案将起作用:

import { path } from './lib/test.js'

扩展之所以重要,是因为定义文件在 typescript 环境中优先于 javascript 文件。这就是模块导入失败的原因。

为避免指定 .js 扩展名,您还可以像这样设置目录结构:

src
|- index.ts
|- lib
  |- test.js
  |- test.d.ts
  |- index.[js|ts]

./lib/index 文件中导出所有测试:

//./src/lib/index.[js|ts]
export * from './test'

然后从库中全部导入:

// ./src/index.ts
import { path } from './lib'
// or
import { path } from './lib/test.js'

如果您混合使用 javascript 和 typescript(假设您正在使用现有代码库迁移到 typescript),则需要更新 tsconfig.json 以包含,这样您就不会在您的 IDE 中没有收到警告:

{
  "compilerOptions": {
    "allowJs": true,
    "declaration": false
  }
}

这样您的 javascript 文件将与 typescript 文件一起转译到您的目标目录。

关于node.js - NodeJS 如何将 JS 文件导入 TypeScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54320967/

相关文章:

node.js - Discord.js client.on

typescript - 如何在 TypeScript 中创建一个适用于数字和字符串的通用加法运算符

python - 包导入创建一个模块,子模块仍然可导入

javascript - Three.js:导入和使用 3d 模型

javascript - 正则表达式中美元符号的含义

database - 序列化推送值

node.js - Webpack 未解析全局安装的 babel 或 babel-loader

javascript - typescript 中的 fs/promises api 无法在 javascript 中正确编译

angular - RXJS 运算符(operator)不使用 firebase

python - 在不同的文件中导入相同的模块