我正在为一个老式的纯 PHP 项目开发一个子模块。 该项目有一个用于一些 JS 依赖项的文件夹。
为了我的理智,我在子模块中使用 Typescript,但我在如何引用依赖项并从依赖项文件夹中的库获取部分类型推断方面遇到了麻烦。
这些依赖项仅是本地的,出于兼容性原因我无法更改它,所以我不能真正使用 npm。
这是项目结构:
在我的
tsconfig.json
中,我有以下选项:
{
"compilerOptions": {
// ...
"allowJs": true,
"checkJs": true,
"rootDir": "./ts",
"outDir": "./js",
// ...
},
"include": [
"./ts/**/*",
"../dependencies/**/*.js"
],
}
这个效果非常好。 Typescript 可以解析依赖项文件夹中的类型,并将我的
./ts
文件正确编译为 ./js
。唯一的问题是它不断抱怨 ../dependencies
中的每个文件出现以下错误:
error TS6059: File is not under 'rootDir'. 'rootDir' is expected to contain all source files.
我尝试将“rootDir”更改为
../
。但这会导致 tsc
将所有依赖项输出到 ./js
文件夹中。我不想这样。
我有几点要给你
TS6059
错误正确地表明您应该将所有源文件放在根dir
下,因此您对rootDir
的更改是正确的。
您不应该将
js
依赖项放置在 include
数组中,因为它们已经是 js
文件。
"allowJs": true
选项使您的js
文件可编译,因此它们将始终位于输出目录中。
js
文件夹作为输出目录。在这种情况下,该目录有两个目的:
它存储输入js
ts
dist
目录作为输出目录而不是
js
目录。关注点分离是关键。输入目录和输出目录应该不同。我还强烈建议您使用一些捆绑器,例如 Webpack 或 Rollup 来实现您的目标,而不是原始 ts 编译。