停止 Aurelia CLI 和 Visual Studio 2017 版本之间的 TypeScript 定义怪胎

Stop the TypeScript definition wack-a-mole between Aurelia CLI and Visual Studio 2017 builds

我在 NET Core 项目中有一个 Aurelia 项目。我可以使用 Aurelia CLI 构建项目,但是 Visual Studio 构建失败并出现以下 TypeScript 错误:

Build:Cannot find name 'RequestInit'. 
Build:Cannot find name 'Request'. 
Build:Cannot find name 'Response'.

这些错误大部分来自 aurelia-fetch-client。 接下来,我尝试通过安装软件包 @types/whatwg-fetch 来解决问题。 Visual Studio 错误消失了,但现在 Aurelia CLI 不会构建。抛出的错误是:

Cannot redeclare block-scoped variable 'fetch'.
Duplicate identifier 'HeadersInit'.
Duplicate identifier 'Headers'.
Duplicate identifier 'RequestInfo'.
Duplicate identifier 'Request'.
Duplicate identifier 'Response'.
... and many more duplicate identifiers. 

冲突发生在 whatwg-fetch 和 lib.dom.d.ts 中。如何让两个版本恢复绿色?

更新 我在 lib.dom.d.ts 中看到请求定义,所以我觉得 Aurelia CLI 正在工作并且 Visual Studio 已损坏。当我有以下 tsconfig 时,为什么 Visual Studio 不接受这些类型:

"compileOnSave": false,
"compilerOptions": {
    "sourceMap": true,
    "target": "es5",
    "module": "amd",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "moduleResolution": "node",
    "lib": ["es2017", "dom"]
},
"exclude": [
    "node_modules",
    "aurelia_project"
],
"filesGlob": [
    "./src/**/*.ts",
    "./test/**/*.ts",
    "./custom_typings/**/*.d.ts"
]

更新 2 如果我将 lib.dom.d.ts 文件添加到 tsconfig 中的文件数组,错误会在 Visual Studio 中消失。

"files": [
    "./node_modules/typescript/lib/lib.es2017.d.ts",
    "./node_modules/typescript/lib/lib.es2017.object.d.ts",
    "./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts",
    "./node_modules/typescript/lib/lib.es2017.string.d.ts",
    "./node_modules/typescript/lib/lib.dom.d.ts"
]

一定有更好的方法。

我之前在 Stack Overflow 上设法解决了很多相同的错误,请看这里,看看这对你是否有用:

也许您已经解决了 link 中的大部分问题,或者这可能不适用于您使用 Aurelia CLI 的具体情况,但是-- 这个命令:npm install typescript@2.1.5 --save 对我和其他一些类似的错误来自 URLFetch 特别是。

@mgiesa 提供的答案是禁用 Visual Studio TypeScript 编译。各种构建工具都在竞争,并且具有不同的 TypeScript 配置。自最初的问题以来,Visual Studio 版本的发布变得更加容易。