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 檔案一起被轉譯到你的目標目錄。
