【问题标题】:Visual Studio 2015 - errors on *.d.ts files in node_modules folderVisual Studio 2015 - node_modules 文件夹中 *.d.ts 文件的错误
【发布时间】:2018-06-01 12:40:55
【问题描述】:

我正在将一个项目从 Angular JS 升级到 Angular 4。TypeScript 已经在 Angular JS 项目中使用,在转换它之后,我在 Visual Studio 中遇到了数以千计的错误,用于第 3 方打字稿打字文件 (*.d .ts)。我在 Visual Studio 中的实际 TypeScript 文件中也遇到了一些错误。

当我使用命令行 TypeScript 编译器 (tsc) 时,TypeScript 代码编译成功,所以我想阻止对所有 *.d.ts 文件进行编译检查。

我已经查看了非常相似的问题的答案,这些问题建议如何忽略这些错误,但它们对我没有任何作用,其中大多数与 VS 2017 相关。

这是我尝试过的禁用编译检查的方法:

在 .csproj 文件中添加了“TypeScriptCompileBlocked”:

   <PropertyGroup>
      <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
      ....
   </PropertyGroup>
  • 然后关闭并重新打开 VS

添加了 .eslintignore 文件

我已将 .eslintignore 文件添加到项目根目录,并设置忽略所有 *.d.ts 文件:

**/*.d.ts
**/node_modules/*

禁用 ESLint

在 VS 工具 > 选项下,我寻找了一个选项,但在 VS2015 中没有执行此操作的选项

tsconfig.json - 排除 node_modules 文件夹

"exclude": [
  "./node_modules/*"
]

-- I've also tried --   

   "node_modules"
   ... and
   "**/*.d.ts"

tsconfig.json - 设置“compileOnSave”:false

{
  "compilerOptions": {
    "compileOnSave": false
  }
}

我还在“compilerOptions”中添加了以下内容:

"types": []

我还设置了各种其他 compilerOptions 来忽略错误,尽管我看到的错误与这些无关:

"noImplicitAny": false,
"suppressImplicitAnyIndexErrors": true,
"noStrictGenericChecks": true

我要怎么做才能忽略 *.d.ts 文件?这是我在文件 node_modules\@angular\common\src\directives\ng_class.d.ts 中看到的一些错误示例:

当前项目配置为:

  • 编译器 (tsc) 版本 = 1.8
  • TypeScript 版本 = 2.6.2(通过 npm 安装)
  • 没有 TypeScript 配置选项直接通过 Visual Studio 项目设置(即在 .csproj 文件中)

我的完整 tsconfig.json:

{
  "compilerOptions": {
    "target": "es5",
    "module": "ES2015",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [ "es2015", "dom" ],
    "noImplicitAny": false,
    "suppressImplicitAnyIndexErrors": true,
    "noStrictGenericChecks": true
  },
  "include": [ "**/*.ts" ],
  "exclude": [
    "node_modules"
  ]
}

(关于我用于模块的值,这是 MicroSoft 文档所说的):

“ES6”和“ES2015”值可用于定位“ES5”或更低版本。

https://www.typescriptlang.org/docs/handbook/compiler-options.html

我也尝试过使用“commonjs”作为值

【问题讨论】:

  • .eslintignore 不会帮助解决 ts 编译错误。 tsconfig.ignore 应该会有所帮助。在遇到同样的问题后,我曾一度进行过这项工作,但那是 2 年前的事了,我不再安装 VS 2015。假设您使用的是最新的 TypeScript (2.6.2),并且您安装了最新的 TS for VS 2015。如果是这种情况,请告诉我,我或许可以提供答案。
  • 您可能缺少"compilerOptions": {"types": []}} 请在此问题中添加一些具体错误的示例以帮助确认。
  • 感谢阿卢安。我试过你的建议,但没有奏效。我添加了一些错误的示例
  • 它可以从命令行工作吗?
  • 不幸的是,忽略在这里对您没有帮助。原因是它不适用。当一个导入被追踪到一个模块时,它总是被包含进来

标签: visual-studio typescript ecmascript-5


【解决方案1】:

我发现 npm 我安装的 TypeScript 是一个完全独立的 TypeScript 安装(我 'node installed' grunt-ts 用于构建自动化的 typescript 编译,出于某种原因 grunt-ts需要这个“安装节点”TypeScript)。 Visual Studio 在尝试编译时没有使用节点安装的 TypeScript,它使用的是专门为 Visual Studio 安装的 TypeScript 1.8 编译器。

为了安装 TypeScript 2.6.2 以供 VS2015 使用,我从这里安装了它:

https://www.microsoft.com/en-us/download/details.aspx?id=48593

这创建了一个文件夹 C:\Program Files (x86)\Microsoft SDKs\TypeScript\2.6,其中包含一个 tsc.exe。然后我在我的 .csproj 文件中设置它

<TypeScriptToolsVersion>2.6</TypeScriptToolsVersion>

这解决了所有的错误。

为了构建项目,我还需要在项目中包含我的 tsconfig.json 文件(右键单击 > 包含在项目中)。这会导致 Visual Studio 忽略 .csproj 文件中的 TypeScript 配置并改用 tsconfig.json

我不得不卸载并重新加载项目几次,在这之间进行保存,直到 Visual Studio 将 VS2015 项目属性识别为被禁用。关闭并重新打开 Visual Studio,如果出现提示,保存对项目的任何更改,可能会实现相同的效果:

所以看起来忽略 d.ts 文件没有任何效果的原因是因为 Visual Studio 无法正确解释解决方案并产生预期的输出。

【讨论】:

  • 传说在这上面停留了好几天
  • @JamesBlackburn 顺便说一句,我发现尝试从 AngularJS 升级到 Angular 会带来痛苦。在另一个项目中,我们从头开始在 Angular 中完全重新创建了应用程序,结果证明这样更快、更容易。也许转换您的主要 ts 代码很有用,但仅此而已。
猜你喜欢
  • 2017-04-28
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 2022-07-23
  • 1970-01-01
  • 2014-08-07
  • 2021-02-13
相关资源
最近更新 更多