VSCode / tslint 不解析 tsconfig.json 中的路径

Posted

技术标签:

【中文标题】VSCode / tslint 不解析 tsconfig.json 中的路径【英文标题】:VSCode / tslint does not resolve paths in tsconfig.json 【发布时间】:2021-02-20 13:06:07 【问题描述】:

vscode 不知何故不尊重我的 tsconfig.json(几周以来,情况有所不同。无论是我的错误还是 vscode 更新...)


"compileOnSave": false,
"compilerOptions": 
    "baseUrl": "./",
    "paths": 
        "@foo-animation/*": [
            "src/app/animation/*"
        ],
        ...

分别在“问题”选项卡中:

找不到模块“@foo-animation/animation-micro”或其对应的类型声明。 ts(2307)

常规基本路径(如@angular/core已正确解决,只是我的“自定义”路径有问题...

编译、构建、运行......所有工作都像魅力一样。所以我相信从角度/打字稿的角度来看一切都很好。 (另外,我使用 IntelliJ 的开发人员也没有问题……)所以它似乎可以归结为“告诉 vscode”……:-/

我的tsconfig.json 位于项目的根文件夹中。唯一的问题是,我使用了另一个tsconfig.app.json,其中包括上面的tsconfig.json

那么有没有办法告诉 vscode 在哪里寻找它的 tsconfig.json(以鼓励解析这些路径)?

This SO question 和this VSCode github issue 可能相关,但我仍然不知道该怎么办。

【问题讨论】:

你试过this吗? 在我当前的项目中,我已经设置了一些路径,但我是在tsconfig.app.json中完成的。我不确切知道这样做的正确方法是什么 - 但编译和 tslint 似乎对我有用 【参考方案1】:

您可以使用typeRootstypes compileOptions。

typeRoots 本身告诉 tsc 在哪里可以找到类型定义。 see typeRoots

"typeRoots": [
      "dirPath/@angular",
      "node_modules/@types",
      "node_modules/electron"
]                     /* List of folders to include type definitions from. */

使用types 告诉它是否有您想要解决的特定问题。任何其他类型都将被忽略。 see types

    "types": [
      "animation-micro",
      "jquery",
      "node",
      "react",
      "prop-types",
      "." //referencing types belonging to paths specified in typeRoots i.e. 'dirPath/@angular/.' , 'node_modules/@types/.' &  'node_modules/electron/.' - needed to resolve namespaces (dependencies)
],                

注意:指定typeRootstypes compileOptions 将排除通常默认包含的类型,除非明确包含。

根据您的运行时设置和要求,其他有用的替代方法可能是使用rootDirs compileOption。

rootDirs 允许您将所有内容都视为 Java 中的“Über jar”(所有内容都在一个地方可用的想法)。 see rootDirs

"rootDirs": [
      "/ts/", 
      "/js/",
      "src/main/resources/static/ts",
      "src/main/resources/static/js"
 ],/* List of root folders whose combined content represents the structure of the project at runtime. */

根据您的用例,您甚至可能不再需要使用这两个 tsconfig 文件。

另请注意,使用 extends overwrites 引用的 tsconfig 设置,因此请注意不要意外覆盖某些路径。这也可能导致问题。

【讨论】:

【参考方案2】:

我最近在设置我的存储库时遇到了类似的问题,我认为将此行添加到您的 vscode settings.json 应该会有所帮助:

"tslint.configFile": "./tslint.json"

如果您的 tslint.json 不在根目录中,您应该添加自己的路径。

【讨论】:

找到了属性,设置了属性,重启了但是没有效果。我确实有一个 tslint.json,但它不包含任何 compilerOptions.paths(应该吗?)。这些路径(见上 ↑)在 'tsconfig.json' 不,tslint 不需要路径并且 tsconfig 看起来是正确的。其他 linting 规则是否适用于您的存储库? 是的,确实如此。 (右引号、多余的空格等)

以上是关于VSCode / tslint 不解析 tsconfig.json 中的路径的主要内容,如果未能解决你的问题,请参考以下文章

VSCode - TSLint 错误 ENOTDIR 无效 cwd

VSCode 仅针对打开的文件显示 TSLint 错误

tslint:禁用在 vscode 中不起作用

VSCode、Prettier 和 TSLint:formatOnSafe 搞乱了自动排序导入

VSCode:tslint-language-service 插件将 lint 提示显示为错误而不是警告

如何在不编译为 JS 的情况下使用用 TypeScript 编写的自定义 tslint 规则和 vscode-tslint?