【问题标题】:VSCode works but TS compiler throws error: VSCode and TS compiler are not in syncVSCode 工作,但 TS 编译器抛出错误:VSCode 和 TS 编译器不同步
【发布时间】:2022-01-12 20:18:33
【问题描述】:

我在 VSCode 中编写我的项目代码,我一直在编写 Node.js Express 应用程序。我需要从 Request 对象访问 req.user.name,VSCode 抱怨 user 对象中不存在名称。所以我在我的项目根目录中创建了global.d.ts 文件,其内容如下:

declare namespace Express {
  interface User {
    userName: string;
    name: string;
    email: string;
  }
}

在我的 tsconfig.json 中,我引用了这个文件如下:

{
  "compilerOptions": {
    "typeRoots": ["./node_modules/@types", "./global.d.ts"]
  },
  "include": [/*...*/,"global.d.ts"]
}

在此之后,VSCode 不再抱怨我上面的错误,但是当我尝试使用实际的 tsc 编译项目时,它会抛出错误。 来自编译器的错误:error TS2339: Property 'name' does not exist on type 'User'

由于某种原因,VSCode 和 TS 编译器不同步。

我该如何解决这个问题?

【问题讨论】:

    标签: node.js typescript express visual-studio-code


    【解决方案1】:

    VS Code 不会自动将项目的 TS 编译器用于其 TS 语言服务。它预装了一个 TSC 版本,除非您另有说明,否则它将使用该版本,因此可能会变得不同步。

    为了确保您的 IDE 与项目的编译器版本同步,您可以告诉它在当前工作区中的何处可以找到项目的 TSC 二进制文件

    如果您还没有,请在项目的根目录下创建一个.vscode 目录,并在其中添加一个settings.json,在这里您可以使用项目特定的设置来配置 VS Code。

    通常,如果 TSC 作为根级节点模块安装,您会将其添加到您的 .vscode/settings.json

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

    上面有一些基于 GUI 的方法基本上可以实现相同的目标,有关更多信息,请查看这些文档...

    https://code.visualstudio.com/docs/typescript/typescript-compiling#_compiler-versus-language-service

    https://code.visualstudio.com/docs/typescript/typescript-compiling#_using-the-workspace-version-of-typescript

    【讨论】:

    • 但是,它对我上面的更改有何反应(开始了解 req.user 是什么以及它包含什么)?但是,对于 TS 编译器来说,它没有任何意义。
    • 感谢您的回答。终于有了一致的体验!
    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2016-02-09
    • 2019-02-15
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    相关资源
    最近更新 更多