typescript Visual Studio代码无法解析angular的tsconfig路径

njthzxwz  于 2023-03-24  发布在  TypeScript
关注(0)|答案(8)|浏览(205)

我试图使用bakers和tsconfigs paths选项导入一些服务,但我无法让angular和vscode沿着。
如果它对一个人有效,对另一个人就无效,反之亦然...
我的情况似乎很简单:

  • src/app/services中,我有一个导出到index.ts中的服务
  • 我的src/tsconfig.app.json是这样的:
{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "types": [],
    "baseUrl": ".",
    "paths": {
      "services": ["app/services"]
    }
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ],
}

而且我的Angular 应用程序编译时没有任何问题,但每次我尝试从'services'导入服务时,vscode总是给我错误,给我[ts] Cannot find module 'services'.
为甚么?
我使用的是typescript 3.1.6,在vscode设置中我有"typescript.tsdk": "C:/Users/myuser/AppData/Roaming/npm/node_modules/typescript/lib"(我也尝试保留默认设置,没有更改)

编辑:

如果我在从src开始的./tsconfig.json中指定paths,则vscode是满意的,但angular不是。
如果我在tsconfig.jsonsrc/tsconfig.app.json中都指定了paths,那么vscode和angular都很满意,但对我来说这似乎是一个太愚蠢的解决方案...

pbpqsu0x

pbpqsu0x1#

我想明白了,即使我一直觉得这很荒谬...
VsCode会自动查找tsconfig.json文件,它并不关心tsconfig.app.json,因此需要在tsconfig.json中指定paths
同时,angular-cli scaffolding在tsconfig.app.json中指定了一个baseUrl参数,该参数覆盖了上面的参数。

解决方法是删除tsconfig.app.json中的baseUrl参数将其值编辑为"../"

(As我个人的一点意见,鉴于vscode主要用于构建angular解决方案,我认为应该在angular-cli脚手架或vscode如何查找tsconfig文件中重新审视一些东西)

bxpogfeg

bxpogfeg2#

这个答案对我很有效。
1.打开 * 命令面板 * 并选择TypeScript: select TypeScript Version ...

1.选择使用 * 工作区版本 *

希望这个答案能解决其他人面临的同样问题。

x6492ojm

x6492ojm3#

似乎VSCode直接检查您打开的文件夹中的tsconfig.json。它不会检查tsc等文件夹,也不会查看tsconfig.app.json。因此在某些情况下,baseUrl可能会丢失,因为VSCode根本没有读取tsconfig.json
VSCode限制在一个固定的地方使用一个tsconfig.json已经有一段时间了,似乎要让它更灵活并不容易:https://github.com/microsoft/vscode/issues/12463(滚动到结尾)
如上所述,这在Angular-CLI脚手架中是很烦人的,因为在工作区的根目录下只有一个tsconfig.json。很明显,项目的tsconfig.app.json中可能有不同的baseUrls,而这些baseUrls不能全部放在根目录下的一个tsconfig.json中。
作为一种解决方法,除了在tsconfig.app.json中的项目特定baseUrl之外,我还在"baseUrl":"."的子项目的src文件夹中为VSCode创建了一个额外的最小tsconfig.json,并从那里打开VSCode。我还没有严格测试过这个,但到目前为止,Angular编译和VSCode智能感知似乎都很满意。

bvn4nwqk

bvn4nwqk4#

如果你使用Angular项目,让baseUrlpaths放在tsconfig.json而不是tsconfig.app.json中。

kyxcudwk

kyxcudwk5#

我为这个问题挣扎了很长时间,尝试了互联网上几乎所有的解决方案。项目可以编译,但VSCode不荣誉tsconfig.json中的“路径”声明。
最后解决这个问题的方法是删除tsconfig.json

中的“include”和“exclude”部分
我不确定这两个中的哪一个是问题所在,但删除这两个最终解决了我长期存在的问题。

0yg35tkg

0yg35tkg6#

解析别名问题的另一个可能原因是在主tsconfig文件中使用include属性。默认值是['**/*']-只需在覆盖它时将'**/*'添加到包含的路径。这是我的问题,但很难检测到是include导致了这个问题。

sz81bmfz

sz81bmfz7#

1.在应用程序中tsconfig.app.json附近创建tsconfig.json
1.添加下一步设置

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
       /* your_paths */
    }
  }
}

1."extends": "./tsconfig.json"上重写tsconfig.app.jsontsconfig.spec.json

最终文件结构

projects
  your_application
    tsconfig.json
    tsconfig.spec.json
    tsconfig.app.json
tsconfig.json
0ve6wy6x

0ve6wy6x8#

这可能是编辑器的问题,所以去tsconfig.editor.json,如果你没有tsconfig.editor.json,那么创建一个,在那里扩展你的tsconfig.app.json,然后在你的tsconfig.json中添加“引用”,并添加你的tsconfig编辑器的路径。
tsconfig.editor.json =〉

tsconfig.json =〉

相关问题