正如其他人所提到的,如果前端和后端具有不同的类型,现有的答案并不能解决问题——几乎在所有情况下,前端代码都支持,dom
而后端代码通常不支持。
拥有顶级tsconfig.json
意味着dom
代码将在前端代码中显示为错误(如果dom
是 lib),或者该dom
代码将在后端代码中被允许(如果dom
省略)。
这是一个有效的解决方案:
文件夹结构
我们的项目往往是“默认后端”,带有一个用于前端代码的特定文件夹。
├── src/
│ ├── frontend/ < Frontend
│ │ ├── `tsconfig.json` (extends frontend framework defaults, eg Svelte)
│ ├── http/ < Backend
│ ├── events/ < Backend
├── tsconfig.json `tsconfig.json` (backend tsconfig)
后端tsconfig.json
这通常是相当小的。我们jest
用于测试和es2019
JS 标准库。
{
"compilerOptions": {
"target": "esnext",
"module": "commonjs",
"outDir": "dist",
"moduleResolution": "node",
"esModuleInterop": true,
"lib": ["es2019"],
"types": ["jest"],
},
"exclude": [
"node_modules",
"public/*",
"src/frontend/*"
],
"include": ["src/**/*"]
}
前端tsconfig.json
这适用于 Svelte,但在旧框架中也可以类似地工作。前端有不同的类型,因为它支持.svelte
文件和dom
{
"extends": "@tsconfig/svelte/tsconfig.json",
"compilerOptions": {
// Default included above is es2017
"target": "es2019",
},
"lib": ["es2019", "dom"],
}
前端特定工具
使汇总使用单独的 tsconfig 文件:
export default {
input: ...
output: ...
plugins: [
...
typescript({
tsconfig: "src/frontend/tsconfig.json",
sourceMap: isDevelopment,
inlineSources: isDevelopment,
}),
...
],
...
};