網站搜尋

node.js - NodeJS 如何將 JS 檔案匯入 TypeScript


我剛開始接觸 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 檔案中導入這個函數時仍然出現錯誤

錯誤:無法找到模組 './lib/test' 於 Function.Module._resolveFilename (module.js:543:15)

答案#1

看起來 tsconfig.json 沒有啟用 'allowJs',因為它導出聲明。

你不想讓這個變成 TypeScript 文件有什麼原因嗎?如果你把 test.js 改成 test.ts,把它改成 .ts 應該可以讓它在你的 index 文件中被識別。

更新

到達此點的完整聊天記錄可以在這裡找到。用於測試的倉庫可以在這裡找到。

好的,所以正如 @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 文件中從 test 導出所有內容:

//./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 檔案就會與 TypeScript 檔案一起被轉譯到你的目標目錄。