Visual Studio代码无法解析角度的tsconfig路径

Doc*_*Doc 5 typescript tsconfig visual-studio-code vscode-settings angular

我正在尝试使用桶和tsconfigs paths选项导入一些服务,但我无法获得角度和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"
  ],
}
Run Code Online (Sandbox Code Playgroud)

我的角度应用没有问题编译,但vscode不断给我的错误每次我试图从导入我的服务时间'services'给我[ts] Cannot find module 'services'.

为什么?

我正在使用typescript 3.1.6并在我的vscode设置中"typescript.tsdk": "C:/Users/myuser/AppData/Roaming/npm/node_modules/typescript/lib"(我也尝试保留默认设置,没有更改)


编辑:

如果我指定paths./tsconfig.json无法启动src,vscode是幸福的,但角度不是.

如果我paths在两者中指定,tsconfig.json并且src/tsconfig.app.jsonvscode和angular都很高兴,但对我来说这似乎是一个太愚蠢的解决方法......

Sha*_*ghi 44

这个答案对我有用。

  1. 打开命令面板并选择TypeScript: select TypeScript Version ... 在此输入图像描述

  2. 选择使用工作区版本 在此输入图像描述

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


Doc*_*Doc 13

我想通了,即使我一直认为这都是荒谬的......

VsCode自动查找tsconfig.json文件并且它不关心tsconfig.app.json,因此paths需要在其中指定tsconfig.json.

同时,angular-cli脚手架指定一个baseUrl参数,tsconfig.app.json其中覆盖上一个.

解决方案是删除baseUrl参数tsconfig.app.json 编辑其值"../"

(作为个人评论,鉴于vscode主要用于构建角度解决方案,我认为应该在angular-cli脚手架或vscode查找tsconfig文件的方式中重新考虑某些内容)

  • 天哪,这就是答案:) 我很沮丧,因为似乎每个人都通过在 tsconfig.app 中定位路径或在目录末尾添加一个 glob 来解决这个问题.. (3认同)

And*_*dle 9

看来 VSCodetsconfig.json直接检查您打开的文件夹中的. 它不会像 tsc 那样检查上面的文件夹,也不查看tsconfig.app.json. 因此,在某些情况下,baseUrl可能会丢失,因为 VSCode 根本没有读取tsconfig.json.

VSCode 对单个tsconfig.json固定位置的限制已经存在了一段时间,似乎要使其更加灵活并不容易: https://github.com/microsoft/vscode/issues/12463 (滚动到末尾)

如上所述,这在具有多个子项目的 Angular-CLI 脚手架中很烦人,而tsconfig.json工作区的根部只有一个子项目。显然,这些项目可能有不同之baseUrls处,不能从根本上tsconfig.app.json归为一个。tsconfig.json

作为一种解决方法,除了特定于项目之外,我还在子项目的 src 文件夹中为 VSCodebaseUrl创建tsconfig.app.json了一个额外的最小文件,并从那里打开 VSCode。我还没有对此进行严格的测试,但到目前为止,Angular 编译和 VSCode 智能感知似乎都很满意。tsconfig.json"baseUrl":"."

  • 请举例! (2认同)

par*_*ent 7

我在这个问题上挣扎了很长时间,并且尝试了互联网上的几乎所有解决方案。该项目可以编译,但 VSCode 不会遵守我的 tsconfig.json 中的“路径”声明。

最终为我解决的问题是删除 tsconfig.json 的“包含”和“排除”部分在此输入图像描述

我不确定这两个问题中的哪一个是问题所在,但删除两者最终解决了我长期存在的问题。

  • 我的 tsconfig 已经工作了很长时间,但决定使用 TS 4.6。我实际上必须*添加 src* `include: [ "src/*", "some other paths" ]` 才能让它恢复生机。 (3认同)

Hun*_*ung 5

如果您使用 Angular 项目,请放置baseUrlpathstsconfig.json不是tsconfig.app.json