正如其他人提到的,现有的答案无法解决前端和后端类型不同的问题 - 几乎在每种情况下都是如此,因为前端代码支持DOM(而不是node.js标准库),而后端代码支持node.js标准库(通常不支持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": {
"target": "es2019",
},
"lib": ["es2019", "dom"],
}
前端专属工具
使rollup使用独立的tsconfig文件:
export default {
input: ...
output: ...
plugins: [
...
typescript({
tsconfig: "src/frontend/tsconfig.json",
sourceMap: isDevelopment,
inlineSources: isDevelopment,
}),
...
],
...
};