![](/img/trans.png)
[英]How to use the TypeScript Compiler API to type-check modules imported using `require()`?
[英]TypeScript compiler is not emitting imported modules
我有一個項目(在 GitHub 上),它使用 TypeScript 編譯器的項目引用功能,所以它有根tsconfig.json
文件和名為shared
的子文件夾的tsconfig.json
文件。
Shared
子文件夾有 2 個文件:
User.ts
Point.ts
主index.ts
文件導入User
模塊,例如
import User from './shared/User';
轉換后的文件放置在target
文件夾下。 我遇到的問題是,由於tsc
target
文件夾具有Point
.d.ts 和 .js 文件(不是由index.ts
導入)並且不包含User
文件(由index.ts
導入)。
tsc -b --listEmittedFiles
的輸出:
TSFILE: /home/user/Projects/test/target/index.js
TSFILE: /home/user/Projects/test/target/index.d.ts
TSFILE: /home/user/Projects/test/target/shared/Point.js
TSFILE: /home/user/Projects/test/target/shared/Point.d.ts
TSFILE: /home/user/Projects/test/target/shared/User.js
TSFILE: /home/user/Projects/test/target/shared/User.d.ts
如果我從index.ts
刪除import
表達式,則目標文件夾將按預期包含User
和Point
腳本。
我的問題是:是tsc
錯誤還是我做錯了什么?
在tsc
3.3
和3.4
版本上進行了測試,結果相同。
根tsconfig.json
:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": true,
"outDir": "./target",
"rootDir": "./source",
"strict": true,
"esModuleInterop": true
},
"references": [
{
"path": "./source/shared"
}
]
}
shared
文件夾的tsconfig.json
:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"declaration": true,
"composite": true,
"strict": true,
"esModuleInterop": true
}
}
最后,我自己得到了解決方案!
子項目的tscconfig.json
文件應該將輸出指向主項目的target/
目錄!
因此,假設您有一個通用項目,其中source/
目錄定義為rootDir
, target/
目錄定義為outDir
。
在source
目錄中,您有兩個子項目: core
和geometry
(如圖所示它在這里)。
因此,它們都應該將outDir
設置為主target/
目錄,例如: ../../target/core
、 ../../target/geometry
。
或者,使用具有“擴展”屬性的配置繼承。 在這種情況下,子項目的配置文件可以像這樣重寫( 示例):
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"composite": true
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.