网络包 TS2304无法找到名称’地图’,’设置’,’承诺’

我有以下 webpack.config.js

var path = require("path");
var webpack = require('webpack');


module.exports = {
entry: {
'ng2-auto-complete': path.join(__dirname, 'src', 'index.ts')
},
resolve: {
extensions: ['', '.ts', '.js', '.json', '.css', '.html']
},
output: {
path: path.join(__dirname, 'dist'),
filename: "[name].umd.js",
library: ["[name]"],
libraryTarget: "umd"
},
externals: [
/^rxjs\//,    //.... any other way? rx.umd.min.js does work?
/^@angular\//
],
devtool: 'source-map',
module: {
loaders: [
{ // Support for .ts files.
test: /\.ts$/,
loaders: ['ts', 'angular2-template-loader'],
exclude: [/test/, /node_modules\/(?!(ng2-.+))/]
}
]
}
};

以及下面的 tsconfig.json

{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"noEmitHelpers": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true,
"pretty": true,
"allowUnreachableCode": true,
"allowUnusedLabels": true,
"noImplicitAny": false,
"noImplicitReturns": false,
"noImplicitUseStrict": false,
"noFallthroughCasesInSwitch": false,
"allowSyntheticDefaultImports": true,
"suppressExcessPropertyErrors": true,
"suppressImplicitAnyIndexErrors": true,
"outDir": "dist",
"baseUrl": "src"
},
"files": [
"src/index.ts"
],
"exclude": [
"node_modules"
],
"compileOnSave": false,
"buildOnSave": false
}

当我像下面这样运行 tsc命令时,一切正常。

ng2-auto-complete (master)$ tsc --declaration
ng2-auto-complete (master)$

当我运行 webpack命令时,它会显示类型脚本编译错误。

ng2-auto-complete (master)$ webpack
ts-loader: Using typescript@2.0.0 and /Users/allen/github/ng2-auto-complete/tsconfig.json
Hash: bd6c50e4b9732c3ffa9d
Version: webpack 1.13.2
Time: 5041ms
Asset     Size  Chunks             Chunk Names
ng2-auto-complete.umd.js  24.4 kB       0  [emitted]  ng2-auto-complete
ng2-auto-complete.umd.js.map  28.4 kB       0  [emitted]  ng2-auto-complete
+ 11 hidden modules


ERROR in /Users/allen/github/ng2-auto-complete/node_modules/@angular/platform-browser/src/dom/dom_renderer.d.ts
(18,37): error TS2304: Cannot find name 'Map'.


ERROR in /Users/allen/github/ng2-auto-complete/node_modules/@angular/platform-browser/src/dom/dom_adapter.d.ts
(96,42): error TS2304: Cannot find name 'Map'.


ERROR in /Users/allen/github/ng2-auto-complete/node_modules/@angular/platform-browser/src/web_workers/worker/location_providers.d.ts
(21,86): error TS2304: Cannot find name 'Promise'.
...
ng2-auto-complete (master)$

我不知道我错过了什么网络包和类型脚本编译。

node_modules已被排除在 tsconfig.json之外

“排除”: [ “ node _ module” ],

和类型定义都在 node_modules

  "devDependencies": {
"@types/core-js": "^0.9.32",
"@types/node": "^6.0.31"

我还尝试使用 typings.json和类型目录,但没有成功。

{
"globalDependencies": {
"core-js": "registry:dt/core-js#0.0.0+20160725163759",
"jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
"node": "registry:dt/node#6.0.0+20160815222444"
}
}

仅供参考,各种版本

$ node --version
v5.7.1
$ npm --version
3.6.0
$ tsc --version
Version 2.0.0

如何使用 webpack命令消除 TS2304错误?

86059 次浏览

MapSetPromiseES6的特征。
在你的 tsconfig.json中,你使用:

"target": "es5"

这导致编译器使用正常的 es5 lib.d.ts,它缺少上述类型的定义。

你想使用 Lib.es6.d.ts:

"target": "es6"

我在 tsconfig.json中添加了这个函数,它看起来没有任何错误。

  "compilerOptions": {
"target": "es5",
"lib": ["es5", "es6", "dom"],  <--- this
...
}

我不确定 lib是否适用于类型脚本2.0功能,但发现有几个库是可用的

从类型脚本配置模式(注意 es2015.Collection)

 "lib": {
"description": "Specify library file to be included in the compilation. Requires TypeScript version 2.0 or later.",
"type": "array",
"items": {
"type": "string",
"enum": [ "es5", "es6", "es2015", "es7", "es2016", "es2017", "dom", "webworker", "scripthost", "es2015.core", "es2015.collection", "es2015.generator", "es2015.iterable",
"es2015.promise", "es2015.proxy", "es2015.reflect", "es2015.symbol", "es2015.symbol.wellknown", "es2016.array.include", "es2017.object", "es2017.sharedmemory" ]
}
}

这解决了编译错误,但是我仍然想知道为什么 tsc命令没有任何错误,而 webpack却没有。tsc在不使用 lib的情况下通过 tsconfig.json搜索所有可能的库?

在 tsconfig.json 中,只需将“ target”: “ es5”更改为“ target”: “ es6”

我必须从 npm 安装 core-js 类型来解决这个问题

npm install @types/core-js

解释 :
@ typesnpm 包的目标是使用 npm 获取类型定义。使用这些类型定义是 TypeScript 2.0的一个特性。

@ type 更换当前的工具,如 打字性病,尽管这些工具将在一段时间内继续受到支持。

就我而言,我不得不逃跑:

npm install typings -g
typings install

这解决了我的问题。

只要加上:

 "lib": ["es6"] // means at least ES6

不要改变目标。 Target 用于告诉 Typecript 将 .ts文件编译到哪个版本的 ECMAScript 中。当然,如果您的应用程序运行的浏览器支持该版本的 ECMAScript,那么您可以更改它。

例如,我使用 "target": "es5""lib": ["es6"]


另一个原因可能是:

您的 .ts文件不在 "rootDir": "./YourFolder",

Https://stackoverflow.com/a/44800490/9690407

npm install typings -g
typings install

在 npm5.6.0中弃用! 而是使用 npm install @types/core-js语法。

tsc index.ts --lib "es6"

如果添加 lib 不能在 tsconfig.json 中工作,请使用上面的命令行选项

由于直接回答 OP 的问题已经有了答案,我想我应该添加修复它的内容。我的情况略有不同,因为我没有使用 WebPack,并且在尝试使用 tsc 时出现了这些错误。其他人给出的答案(在 lib 中加上“ es6”)并没有为我解决这个问题。对我来说,问题是我的机器上安装了 v9.11.1的节点,但是我使用 npm 来获取“@type/node”,它获得了最新的 v10 + 。卸载该节点类型并安装特定的 v9节点类型文件之后,这个问题就解决了。

如果您想知道为什么这些修复程序都不能正常工作 ,请记住——如果您在命令行上指定要编译的文件或 package.json tsc 将不会读取您的 tsconfig.json 文件,因此没有任何效果。相反,在 tsconfig.json 中指定“ files”和“ outDir”,其中一个“ lib”修复程序可能对您有用。然后只使用:

tsc --sourcemaps

为了解决这个错误,更改 tsconfig.json 文件中的以下属性。

"lib": [
"es2018",
"dom",
"es5",
"es6"
],
"module": "es2015",
"target": "es6"

运行之后,在终端中执行以下命令。

npm install @types/es6-shim

错误解决。

用这个

tsc filename.ts --lib es2015

我正在使用 node.js v10.16.3.对我来说,问题是打印脚本编译器忽略了我的 tsconfig.json文件。

三种解决方案对我奏效:

  1. 安装 ts-node 并使用它来编译和运行文件
  2. 编译文件时执行 tsc filename.ts --lib "es6", "dom"
  3. 安装 @types/node,它将允许您在没有错误的情况下运行 tsc filename.ts

为了解决这个问题,你只需要像下面这样在你的 ts 文件中导入 map 方法:

import { map } from 'rxjs/operators';

对我来说,解决方案是安装 @types/node:

yarn add @types/node --dev

或者如果你喜欢 npm:

npm install @types/node --dev

但是,我认为如果您打算继续使用“ Map”、“ Set”或“許诺”,那么在 tsconfig.json中的“ lib”数组中包含“ es6”是一个很好的实践。