angular - 错误 TS2304 : Build:Cannot find name 'Iterable' after upgrading to Angular 4

标签 angular typescript iterable

我正在使用 Typescript 2.4.1 并升级了我项目中的许多包。其中我将Angular从2升级到4.3.1。 在 @types 包中进行多次更正后,我留下的错误是:

\node_modules\@types\jquery\index.d.ts(2955,63): error TS2304: Build:Cannot find name 'Iterable'.
\node_modules\@types\three\three-core.d.ts(767,24): error TS2304: Build:Cannot find name 'Iterable'.
\node_modules\@types\three\three-core.d.ts(771,24): error TS2304: Build:Cannot find name 'Iterable'.
\node_modules\@types\three\three-core.d.ts(775,24): error TS2304: Build:Cannot find name 'Iterable'.
\node_modules\@types\three\three-core.d.ts(779,24): error TS2304: Build:Cannot find name 'Iterable'.
\node_modules\@types\three\three-core.d.ts(783,24): error TS2304: Build:Cannot find name 'Iterable'.
\node_modules\@types\three\three-core.d.ts(787,24): error TS2304: Build:Cannot find name 'Iterable'.
\node_modules\@types\three\three-core.d.ts(791,24): error TS2304: Build:Cannot find name 'Iterable'.
\node_modules\@types\three\three-core.d.ts(795,24): error TS2304: Build:Cannot find name 'Iterable'.
\node_modules\@types\three\three-core.d.ts(799,24): error TS2304: Build:Cannot find name 'Iterable'.

我发现了许多类似的问题和答案,目前的解决方案是针对“es2015”和/或添加库:[“dom”、“es2015”、“es2015.iterable”]。 我已经尝试了所有这些以及更多,但仍然存在相同的“可迭代”错误。

因此,我更新的 tsconfig.json 是:

{
    "compileOnSave": true,
    "compilerOptions": {
        "declaration": false,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "lib": [ "dom", "dom.iterable", "es2015", "es2015.iterable", "esnext" ],
        "module": "commonjs",
        "moduleResolution": "node",
        "noImplicitAny": true,
        "noEmitOnError": true,
        "outDir": "./wwwroot/js",
        "removeComments": false,
        "rootDir": "./Client",
        "sourceMap": true,
        "suppressImplicitAnyIndexErrors": true,
        "target": "es2015",
        "typeRoots": [
            "./node_modules/@types",
            "./Client"
        ]
    },
    "exclude": [
        "node_modules",
        "wwwroot/lib"
    ],
    "filesGlob": [
        "./Client/**/*.ts"
    ]
}

我的 package.json 是:

{
    "version": "1.0.0",
    "name": "web-server",
    "private": true,
    "dependencies": {
        "@angular/common": "^4.3.1",
        "@angular/compiler": "^4.3.1",
        "@angular/core": "^4.3.1",
        "@angular/forms": "^4.3.1",
        "@angular/http": "^4.3.1",
        "@angular/platform-browser": "^4.3.1",
        "@angular/platform-browser-dynamic": "^4.3.1",
        "@angular/router": "^4.3.1",
        "@angular/upgrade": "^4.3.1",
        "bootstrap": "3.3.7",
        "core-js": "2.4.1",
        "lodash": "4.17.4",
        "pixi.js": "4.5.4",
        "reflect-metadata": "0.1.10",
        "rxjs": "^5.4.2",
        "systemjs": "0.20.17",
        "three": "0.86.0",
        "zone.js": "0.8.14"
    },
    "devDependencies": {
        "@types/chai": "^4.0.1",
        "@types/jquery": "3.2.9",
        "@types/lodash": "4.14.71",
        "@types/mocha": "2.2.41",
        "@types/pixi.js": "4.5.2",
        "@types/three": "0.84.19",
        "bower": "^1.8.0",
        "gulp": "3.9.1",
        "gulp-clean": "^0.3.2",
        "gulp-concat": "^2.6.1",
        "gulp-typescript": "^3.2.1",
        "gulp-inline-ng2-template": "^4.0.0",
        "gulp-sourcemaps": "^2.6.0",
        "gulp-tsc": "^1.3.2",
        "gulp-uglify": "^3.0.0",
        "merge2": "^1.1.0",
        "path": "^0.12.7",
        "rimraf": "^2.6.1",
        "systemjs-builder": "^0.16.9",
        "typescript": "2.4.1"
    },
    "scripts": {
        "gulp": "gulp",
        "rimraf": "rimraf",
        "bundle": "gulp bundle",
        "postbundle": "rimraf dist"
    }
}

在所有这些 lib 包含之后怎么可能找不到“iterable”? Typescript 编译器不会忽略我的 tsconfig.json,因为更改某些选项会提供各种输出,但没有一个是没有错误的。

我的环境是带有 Typescript Tools 2.4.1 的 Visual Studio 2015 update 3。 我正在使用 npn @types(无打字)。 详细的编译输出表明 Visual Studio 有效地使用了 2.4.1 版本。

最奇怪的是,使用相同的 Typescript 版本和 tsconfig 使用 gulp 进行编译不会出错。

最佳答案

'Iterable' 在节点的类型文件中定义。安装为我解决问题的文件 (node_modules/@types/node/index.d.ts)。

npm install @types/node --save-dev

关于angular - 错误 TS2304 : Build:Cannot find name 'Iterable' after upgrading to Angular 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45360993/

相关文章:

typescript - 在 WebStorm 中,如何排除从 ts/tsx 生成的 js 文件?

typescript - Visual Studio 代码组织导入功能

javascript - 如何使用 Typescript 的自定义方法实现类数组类?

javascript - 使用 observable 1 分钟后重复请求

javascript - Angular - ng针对性能问题

angular - 没有导出成员 HttpClientModule、BrowserAnimationsModule

python - "iterable"在Python中到底意味着什么?为什么我的实现 `__getitem__()` 的对象不是可迭代的?

Angular 9 通用部署问题

javascript - RxJS:如何仅在订阅外部可观察对象/主题时订阅内部可观察对象?

Python 3 : List of over 100 indices cycles back around after index 47. 为什么?我该如何阻止呢?