首先,我知道有几个类似的问题,但无法找到解决这个问题的任何一个...
因此,我有一个使用Nextron创建的ElectronJS项目,其文件结构如下所示:
├── main/
│ └──...
├── renderer/
│ ├── src/
│ │ └── index.ts
│ ├── td/
│ │ └── env.d.ts
│ ├── ...
│ └── tsconfig.json
├── tsconfig.json
└──...
根目录中tsconfig.json
文件的内容如下
{
"compilerOptions": {
"target": "es5",
"module": "esnext",
"moduleResolution": "node",
"jsx": "preserve",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"isolatedModules": true
},
"include": ["renderer/next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules", "renderer/next.config.js", "app", "dist"]
}
而renderer/tsconfig.json
中的一个为:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@src": ["src"],
"@src/*": ["src/*"]
}
},
"include": ["./td/*.ts"]
}
当我通过运行项目时,一切正常
npm run dev
或
npm run build
但在vs-code中,我收到关于常量和其他声明未找到(在/renderer/td/env.d.ts
中定义)的错误(在renderer
文件夹内的文件中)
这意味着,我可以继续工作,只是在IDE中看到错误,然后构建过程将正常工作(即,我实际上可以获得声明的环境常量的值并访问定义的路径别名),但这是相当烦人的...
你知道如何让vs-code正确地检测包含的文件吗?
为了以防万一,/renderer/ts/env/d/ts
的内容如下所示:
/** Env constant set to (package.json).name */
declare const PACKAGE_NAME: string;
/** Env constant set to (package.json).version */
declare const PACKAGE_VERSION: string;
/** Env constant set to the build ID */
declare const BUILD_ID: string;
/** Env constant set to the git commit hash */
declare const COMMIT_HASH: string;
/** Env constant set to the 7 first characters of the git commit hash */
declare const COMMIT_HASH_SHORT: string;
/** Env constant set to `true` for the code to use in server side, `false` for the one delivered to the client */
declare const IS_SERVER: boolean;
/** Env constant set to `true` for the production build, `false` for development */
declare const IS_PRODUCTION: boolean;
它基本上声明了由NextJS上的webpack在构建时定义的环境变量
**编辑:**已上载具有最低配置的存储库以重现此问题:https://github.com/danikaze/vscode-multi-tsconfig
3条答案
按热度按时间gcxthw6b1#
我最近在我公司的Vue JS项目中遇到了类似的问题,我们的项目存储库是一个单一存储库,所以有一个根级别
tsconfig.json
和一个子应用级别tsconfig.json
。但是VueJS文件的VS代码扩展(Vetur)只考虑了项目根级别
tsconfig.json
,所以我的个人应用级别tsconfig
被忽略了,因此我也不得不遭受intellisense错误。对我有效的解决方法是在底部的链接中。你必须创建一个Multi-root workspace。将你的根级目录和子目录
renderer
添加到多根工作区。确保renderer
目录是你的.code-workspace
文件的folders
条目中的第一个条目。您的
{name of your workspace}.code-workspace
文件应该类似于下面的代码。这将使VS代码考虑到您的子目录的
tsconfig
文件。Github问题
eh57zj3b2#
所以...我在Github中打开了一个问题,经过几次调查并打开了第2期,看起来最终问题是不同的。
基本上,问题的来源是从包含的文件导入外部数据,而规范不支持这一点。
因为
env.d.ts
包含一个import语句,所以该文件被认为是一个模块(模块变量不是全局作用域的一部分,而是必须显式导入)您可以通过在全局作用域中显式声明
PACKAGE_NAME
来解决此问题:解决方案/官方线程
pu3pd22g3#
对我来说,在
.vscode/settings.json
上添加多根指令解决了这个问题。即