为什么在 Visual Studio Code 中 TypeScript 忽略了我的 tsconfig.json 文件?

53

我的项目设置如下

project/
|
+---src/
|   |
|   +---app/
|       |
|       sample.ts
|
+---typings/
+---tsconfig.json

这是我的tsconfig.json

{
    "compilerOptions": {
        "rootDir": "src",
        "target": "es5",
        "module": "commonjs",
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "removeComments": true,
        "sourceMap": true,
        "noImplicitAny": false,
        "outDir": "dist"
    },
    "exclude": [
        "node_modules",
        "src/assets",
        "src/lib"
    ]
}
我想知道的是,为什么VSC会指出错误,例如Error Highlighting in VSC,明明没有错误("experimentalDecorators": truetsconfig.json中设置了),而应用程序也可以很好地进行转换?不仅仅是装饰器,如Promise等也会被突出显示(我确保在与typings相同的文件夹中有tsconfig.json,并且已经安装了es6-shim的类型定义)。
不确定是否重要,但我目前使用的是typescript@2.0.0-dev.20160707
7个回答

72

简短回答

如果您在VS Code中使用比默认提供的TypeScript版本更新的版本,则VS Code会忽略您的tsconfig.json

由于您正在使用TypeScript 2.0.0-dev.20160707,因此可能会出现这种情况。

如何在VS Code中使用更新的TypeScript版本

首先,将TypeScript安装到您的node_modules中。选择稳定版或夜间版。

npm install typescript --save-dev // stable
npm install typescript@next --save-dev // nightly

其次,需要将生成的 lib 相对路径添加到你的 settings.json 文件中。也就是说,通过 "文件" > "首选项" > "用户设置" 在 VS Code 中打开 settings.json 文件,并添加以下属性。

{
  "typescript.tsdk": "node_modules/typescript/lib"
}

注意,如果您将TypeScript安装在全局(-g)而不是项目的node_modules中,则请相应地调整typescript.tsdk的位置。

第三步,确保您拥有有效的tsconfig.json。这是一个示例。

{
    "compileOnSave": false,
    "compilerOptions": {
        "sourceMap": true,
        "target": "es5",
        "experimentalDecorators": true,
        "noImplicitAny": false
    },
    "exclude": [
        "node_modules"
    ],
    "filesGlob": [
        "src/**/*.ts",
        "test/**/*.ts",
        "typings/index.d.ts"
    ]
}

文档

VS Code内置了最新的稳定版本的TypeScript。如果您想使用更新的TypeScript版本,可以定义typescript.tsdk设置(文件>首选项>用户/工作区设置),指向包含TypeScript tsserver.js和相应lib.*.d.ts文件的目录。目录路径可以是绝对路径或相对于工作区目录的路径。通过使用相对路径,您可以轻松地与团队共享此工作区设置并使用最新的TypeScript版本(npm install typescript@next)。有关如何安装TypeScript夜间版本的更多详细信息,请参阅此博客文章。(强调添加)

另请参阅:https://blogs.msdn.microsoft.com/typescript/2016/01/28/announcing-typescript-1-8-beta/


10
对我来说,最关键的是一个有效的 tsconfig.json 文件——如果 VSCode 告诉你有问题的时候会更有帮助,而不是默默地忽略它!!! - eddiewould
6
对我来说出现这个问题是因为我在tsconfig中定义了include: ["./src/index.ts"]。 我这么做是为了TypeScript只为包含的文件生成类型定义(树摇),但是它似乎会使VS Code忽略所有其他文件的本地tsconfig.ts。 - Maciej Krawczyk
在工作区设置中,应该配置TypeScript的位置(以相对路径书写),不是吗? - Xogaz

31
在我的情况下,问题在于我正在编辑的.ts文件未包含在tsconfig.json中。我添加了一个新的scripts/build.ts文件,并在tsconfig.json中进行了如下设置:
{
  include: ["src/**/*.ts"]
}

必须补充:

{
  include: ["src/**/*.ts", "scripts/**/*.ts"]
}

2
这就是解决我的问题的方法,谢谢。我只需要将 src/*.ts 更改为 src/**/*.ts,所有的问题都解决了,谢谢! - Eduardo Russo

6

找到通过npm安装的typescript文件夹的位置,我的情况下是:

C:\Users\<username>\AppData\Roaming\npm\node_modules\typescript\\lib

除其他文件外,应该还有以下内容:

lib.d.ts
tsserver.js

进入内部。现在打开设置:

File -> Preferences -> User Settings/Workspace Settings

这应该打开一个名为settings.json的文件,在其中添加:

{
    "typescript.tsdk": "C:\\Users\\<username>\\AppData\\Roaming\\npm\\node_modules\\typescript\\lib"
}

(注意双反斜杠\\), 保存并 - 非常重要 - 重新启动Visual Studio Code。享受吧。


1
如果您删除 node_modules/ 并重新安装它,会发生什么? - danielrvt
你不应该在代码中引用个人用户名。这样做非常难以维护,特别是当你将代码移动到新计算机或需要与他人共享时。以上答案在我看来更好。 - Brandon
@TrentBing 不要将.vscode文件夹提交到Git! - Pavel Mayorov
@PavelMayorov 我总是将.vscode文件夹上传到Git。为什么要让不同的开发人员在存储库上具有不同的VS Code设置(格式化程序设置、ESLint设置、TypeScript版本等),这些设置与存储库的期望设置冲突呢?.vscode文件夹确保所有使用VS Code的开发人员不会互相干扰。 - Brandon

3

有一个技巧,你可能已经注意到了,也可能没有。当你改变tsconfig时,VS Code不会识别它,你必须重新启动TypeScript服务器。

我曾经遇到过类似的情况,当我在将7个React应用程序合并到Turborepo monorepos中时,当我对tsconfig/.eslintrc进行更改时,无法实时反映,所以我构建了这个小扩展来监视这些配置文件,并自动重启TypeScript / ESLint服务器。希望能帮到你。

VS Code扩展:

https://marketplace.visualstudio.com/items?itemName=neotan.vscode-auto-restart-typescript-eslint-servers

image


1
在我的情况下,问题是我的tsconfig.json放错了位置。它在.vscode文件夹中,但应该是在上一级目录中。
当我点击右下角的Typescript版本并且VSCode菜单告诉我找不到tsconfig文件并提示我创建一个时,我注意到了这个问题。

1

请确保您的项目中没有jsconfig.json文件或任何其他覆盖配置文件。这对我解决了问题!


1

我遇到了同样的错误,我的问题出在"include": [...]选项上,这个选项设置不正确(没有覆盖src文件夹中的所有文件)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接