Visual Studio 2015 - node_modules文件夹中的*.d.ts文件报错

7
我正在将一个项目从Angular JS升级到Angular 4。在Angular JS项目中已经使用了TypeScript,在转换后,我在Visual Studio中针对第三方TypeScript类型文件(*.d.ts)收到数千个错误。我在实际的TypeScript文件中也收到了一些错误。
当我使用命令行TypeScript编译器(tsc)时,TypeScript代码可以成功编译,因此我想防止编译检查所有*.d.ts文件。
我已经尝试过以下方法来禁用编译检查:
- 在.csproj文件中添加'TypeScriptCompileBlocked'; - 在tsconfig.json文件中添加"skipLibCheck": true;
但是,这些方法都无法解决问题,大多数与VS 2017有关。
   <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": []

我还设置了各种其他的编译器选项来忽略错误,尽管我看到的错误与这些选项无关。
"noImplicitAny": false,
"suppressImplicitAnyIndexErrors": true,
"noStrictGenericChecks": true

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

enter image description here

当前项目的配置如下:

  • 编译器(tsc)版本 = 1.8
  • TypeScript 版本 = 2.6.2(通过 npm 安装)
  • 没有通过 Visual Studio 项目直接设置 TypeScript 配置选项(即在 .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"
  ]
}

关于我使用的模块值,这是微软文档的说法:

当目标为“ES5”或更低版本时,可以使用“ES6”和“ES2015”值。

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

我还尝试使用"value"作为"commonjs"的值


1
.eslintignore 无法帮助解决 ts 编译错误,应该使用 tsconfig.ignore。我曾经遇到过相同的问题并使其正常工作,但那是两年前,我现在已经没有安装VS 2015了。假设您正在使用最新版本的 TypeScript(2.6.2),并且已经安装了最新版本的 TS for VS 2015。如果是这种情况,请告诉我,我可以提供答案。 - Aluan Haddad
1
您可能缺少 "compilerOptions": {"types": []}}。请在此问题中添加一些具体错误的示例以帮助确认。 - Aluan Haddad
它能从命令行工作吗? - Aluan Haddad
是的,命令行编译可以工作。我发现使用CLI的tsc -v给了我1.8.x,而我在package.json中有"typescript": "^2.6.2"。我从系统路径中删除了tsc,并对项目进行了npm卸载,但我仍然在VS中看到错误。虽然使用tsc的命令行编译现在已被禁用,但我仍然在Visual Studio中收到错误。我真的很想知道Visual Studio用于其错误检查的内容(我没有通过.csproj文件进行任何TypeScript配置)。我仍然可以转换为TypeScript,因为我正在使用grunt-ts进行自动处理。 - Chris Halcrow
1
不幸的是,在这里忽略不会有帮助。原因是它不适用。当一个导入被追踪到一个模块时,它总是被包含。 - Aluan Haddad
显示剩余2条评论
1个回答

1
我发现我安装的npm中的TypeScript是完全独立的(我使用'node install' grunt-ts进行了编译自动化的typescript编译,并且由于某种原因grunt-ts需要这个'node installed' TypeScript)。Visual Studio在尝试编译时没有使用node-installed TypeScript,而是使用专门为Visual Studio安装的TypeScript 1.8编译器。
要安装用于VS2015的TypeScript 2.6.2,我从这里安装了它:
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。

我不得不多次卸载和重新加载项目,在之间保存,直到VS2015项目属性被Visual Studio识别为已禁用。关闭并重新打开Visual Studio,并在提示时保存任何更改,可能会达到相同的效果:

enter image description here

似乎原因是Visual Studio无法正确解释解决方案并生成预期的输出,因此任何忽略d.ts文件的尝试都没有效果。

传奇已经卡了好几天了。 - James Blackburn
顺便说一句,我发现试图从AngularJS升级到Angular会带来很多麻烦。在另一个项目中,我们完全从头开始用Angular重新创建了应用程序,结果发现这样做更快更容易。也许转换你的主要ts代码有用,但仅限于此。 - Chris Halcrow

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