首页 > 解决方案 > NodeJS 如何将 JS 文件导入 TypeScript

问题描述

我是 TypeScript 的新手。我目前正在学习使用 Typescript 语言的 NodeJS Loopback 4框架。我的问题是如何将一些函数,已经在 J​​S 文件中导出的类导入到我的 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;
    }

我也尝试使用这样的定义打字稿

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

但在 index.ts 文件中导入此函数时仍然出错

错误:在 Function.Module._resolveFilename (module.js:543:15) 处找不到模块“./lib/test”

标签: node.jstypescriptimportloopbackjs

解决方案


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

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

更新

到此为止的完整聊天记录可以在这里找到。用于测试的存储库在这里找到

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

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

扩展很重要的原因是定义文件优先于打字稿环境中的 javascript 文件。这就是模块导入爆炸的原因。

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

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

./lib/index文件中全部从测试中导出:

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

然后从 lib 中导入所有内容:

// ./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 文件将与打字稿文件一起被转译到您的目标目录。


推荐阅读