Angular:找不到 Promise、Map、Set 和 Iterator [英] Angular: Can't find Promise, Map, Set and Iterator
问题描述
安装Angular后,Typescript编译器不断报错,找不到Promise
、Map
、Set
和Iterator代码>.
直到现在我都忽略了它们,但现在我需要 Promise
以便我的代码可以工作.
从'angular2/core'导入{Component};@成分({选择器:'问候-cmp',模板:`{{ asyncGreeting |异步}}</div>`})导出类 GreetingCmp {asyncGreeting: Promise= 新承诺(解决 => {//1 秒后,promise 将解析window.setTimeout(() => resolve('hello'), 1000);});}附加信息:npm -v 是 2.14.12node -v 是 v4.3.1打字稿 v 是 1.6错误:
……我的代码错误…………C:UsersarmyTikDesktopangular2greeting_cmp.ts错误:(7, 20) TS2304:找不到名称Promise".错误:(7, 42) TS2304:找不到名称Promise".………………………………………………………………………………………………………………………………………………………………………………C:UsersarmyTikDesktopangular2
ode_modulesangular2platformrowser.d.ts错误:(77, 90) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccoreapplication_ref.d.ts错误:(83, 60) TS2304:找不到名称Promise".错误:(83, 146) TS2304:找不到名称Promise".错误:(96, 51) TS2304:找不到名称Promise".错误:(96, 147) TS2304:找不到名称Promise".错误:(133, 90) TS2304:找不到名称Promise".错误:(171, 81) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccorechange_detectionparserlocals.d.ts错误:(3, 14) TS2304:找不到名称地图".错误:(4, 42) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccoredebugdebug_node.d.ts错误:(14, 13) TS2304:找不到名称地图".错误:(24, 17) TS2304:找不到名称地图".错误:(25, 17) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccorediprovider.d.ts错误:(436, 103) TS2304:找不到名称地图".错误:(436, 135) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccorelinkercompiler.d.ts错误:(12, 50) TS2304:找不到名称Promise".错误:(16, 41) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccorelinkerdynamic_component_loader.d.ts错误:(108, 136) TS2304:找不到名称Promise".错误:(156, 150) TS2304:找不到名称Promise".错误:(197, 128) TS2304:找不到名称Promise".错误:(203, 127) TS2304:找不到名称Promise".错误:(204, 141) TS2304:找不到名称Promise".错误:(205, 119) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modulesangular2srccore
enderapi.d.ts错误:(13, 13) TS2304:找不到名称地图".错误:(14, 84) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srcfacadeasync.d.ts错误:(27, 33) TS2304:找不到名称Promise".错误:(28, 45) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modulesangular2srcfacadecollection.d.ts错误:(1, 25) TS2304:找不到名称MapConstructor".错误:(2, 25) TS2304:找不到名称SetConstructor".错误:(4, 27) TS2304:找不到名称地图".错误:(4, 39) TS2304:找不到名称地图".错误:(7, 9) TS2304:找不到名称地图".错误:(8, 30) TS2304:找不到名称地图".错误:(11, 43) TS2304:找不到名称地图".错误:(12, 27) TS2304:找不到名称地图".错误:(14, 23) TS2304:找不到名称地图".错误:(15, 25) TS2304:找不到名称地图".错误:(95, 41) TS2304:找不到名称Set".错误:(96, 22) TS2304:找不到名称Set".错误:(97, 25) TS2304:找不到名称Set".C:UsersarmyTikDesktopangular2
ode_modulesangular2srcfacadelang.d.ts错误:(13, 17) TS2304:找不到名称地图".错误:(14, 17) TS2304:找不到名称Set".错误:(78, 59) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srcfacadepromise.d.ts错误:(2, 14) TS2304:找不到名称Promise".错误:(7, 32) TS2304:找不到名称Promise".错误:(8, 38) TS2304:找不到名称Promise".错误:(9, 35) TS2304:找不到名称Promise".错误:(9, 93) TS2304:找不到名称Promise".错误:(10, 34) TS2304:找不到名称Promise".错误:(11, 32) TS2304:找不到名称Promise".错误:(11, 149) TS2304:找不到名称Promise".错误:(12, 43) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modulesangular2srchttpheaders.d.ts错误:(43, 59) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srchttpurl_search_params.d.ts错误:(11, 16) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srcplatformrowserrowser_adapter.d.ts错误:(75, 33) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modulesangular2srcplatformdomdom_adapter.d.ts错误:(85, 42) TS2304:找不到名称地图".C:UsersarmyTikDesktopangular2
ode_modules
xjsCoreOperators.d.ts错误:(35, 67) TS2304:找不到名称Promise".错误:(50, 66) TS2304:找不到名称Promise".错误:(89, 67) TS2304:找不到名称Promise".错误:(94, 38) TS2304:找不到名称Promise".错误:(94, 50) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modules
xjsObservable.d.ts错误:(46, 62) TS2304:找不到名称Promise".错误:(47, 42) TS2304:找不到名称迭代器".错误:(103, 74) TS2304:找不到名称Promise".错误:(103, 84) TS2304:找不到名称Promise".错误:(143, 66) TS2304:找不到名称Promise".错误:(158, 65) TS2304:找不到名称Promise".错误:(201, 66) TS2304:找不到名称Promise".错误:(206, 38) TS2304:找不到名称Promise".错误:(206, 50) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modules
xjsobservableForkJoinObservable.d.ts错误:(6, 50) TS2304:找不到名称Promise".错误:(7, 58) TS2304:找不到名称Promise".C:UsersarmyTikDesktopangular2
ode_modules
xjsobservableFromObservable.d.ts错误:(7, 38) TS2304:找不到名称Promise".错误:(7, 51) TS2304:找不到名称迭代器".C:UsersarmyTikDesktopangular2
ode_modules
xjsobservablePromiseObservable.d.ts错误:(9, 31) TS2304:找不到名称Promise".错误:(10, 26) TS2304:找不到名称Promise".
解决方案 Angular 5 with Typescript ^2.0.0
这也适用于早期版本的 Angular 2+.
为了让它与 typescript 2.0.0 一起工作,我做了以下工作.
npm install --save-dev @types/core-js
tsconfig.json
"compilerOptions": {声明":假,emitDecoratorMetadata":真,"experimentalDecorators": 真,"mapRoot": "./",模块":es6","moduleResolution": "节点",noEmitOnError":真,noImplicitAny":假,"outDir": "../dist/out-tsc",源地图":真,目标":es5",类型根":[../node_modules/@types"],类型":[核心js"]}
更多关于@types 和 typescript 2.0.0.
Tsconfig compilerOptions lib 与类型
如果您不想安装核心 js 类型定义,那么 typescript 中包含一些 es6 库.这些是通过 tsconfig 中的 lib: []
属性使用的.
参见此处的示例:https://www.typescriptlang.org/docs/handbook/compiler-options.html
<块引用>注意:如果未指定--lib,则会注入默认库.这注入的默认库是: ► 对于 --target ES5: DOM,ES5,ScriptHost ►对于 --target ES6:DOM,ES6,DOM.Iterable,ScriptHost
tl;博士
简答 "lib": [ "es6", "dom" ]
或 "types": ["core-js"]
可用于解析找不到 Promise、Map、Set 和 Iterator
.但是,同时使用两者会导致重复标识符错误.
After installing Angular, the Typescript compiler keep getting some errors about not finding Promise
, Map
, Set
and Iterator
.
Until now I ignored them but now I need Promise
so my code can work.
import {Component} from 'angular2/core';
@Component({
selector: 'greeting-cmp',
template: `<div>{{ asyncGreeting | async}}</div>`
})
export class GreetingCmp {
asyncGreeting: Promise<string> = new Promise(resolve => {
// after 1 second, the promise will resolve
window.setTimeout(() => resolve('hello'), 1000);
});
}
Additional information:
npm -v is 2.14.12
node -v is v4.3.1
typescript v is 1.6
The errors:
................ERROS OF MY CODE.................
C:UsersarmyTikDesktopangular2greeting_cmp.ts
Error:(7, 20) TS2304: Cannot find name 'Promise'.
Error:(7, 42) TS2304: Cannot find name 'Promise'.
.........................................
C:UsersarmyTikDesktopangular2
ode_modulesangular2platformrowser.d.ts
Error:(77, 90) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srccoreapplication_ref.d.ts
Error:(83, 60) TS2304: Cannot find name 'Promise'.
Error:(83, 146) TS2304: Cannot find name 'Promise'.
Error:(96, 51) TS2304: Cannot find name 'Promise'.
Error:(96, 147) TS2304: Cannot find name 'Promise'.
Error:(133, 90) TS2304: Cannot find name 'Promise'.
Error:(171, 81) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srccorechange_detectionparserlocals.d.ts
Error:(3, 14) TS2304: Cannot find name 'Map'.
Error:(4, 42) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srccoredebugdebug_node.d.ts
Error:(14, 13) TS2304: Cannot find name 'Map'.
Error:(24, 17) TS2304: Cannot find name 'Map'.
Error:(25, 17) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srccorediprovider.d.ts
Error:(436, 103) TS2304: Cannot find name 'Map'.
Error:(436, 135) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srccorelinkercompiler.d.ts
Error:(12, 50) TS2304: Cannot find name 'Promise'.
Error:(16, 41) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srccorelinkerdynamic_component_loader.d.ts
Error:(108, 136) TS2304: Cannot find name 'Promise'.
Error:(156, 150) TS2304: Cannot find name 'Promise'.
Error:(197, 128) TS2304: Cannot find name 'Promise'.
Error:(203, 127) TS2304: Cannot find name 'Promise'.
Error:(204, 141) TS2304: Cannot find name 'Promise'.
Error:(205, 119) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srccore
enderapi.d.ts
Error:(13, 13) TS2304: Cannot find name 'Map'.
Error:(14, 84) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srcfacadeasync.d.ts
Error:(27, 33) TS2304: Cannot find name 'Promise'.
Error:(28, 45) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srcfacadecollection.d.ts
Error:(1, 25) TS2304: Cannot find name 'MapConstructor'.
Error:(2, 25) TS2304: Cannot find name 'SetConstructor'.
Error:(4, 27) TS2304: Cannot find name 'Map'.
Error:(4, 39) TS2304: Cannot find name 'Map'.
Error:(7, 9) TS2304: Cannot find name 'Map'.
Error:(8, 30) TS2304: Cannot find name 'Map'.
Error:(11, 43) TS2304: Cannot find name 'Map'.
Error:(12, 27) TS2304: Cannot find name 'Map'.
Error:(14, 23) TS2304: Cannot find name 'Map'.
Error:(15, 25) TS2304: Cannot find name 'Map'.
Error:(95, 41) TS2304: Cannot find name 'Set'.
Error:(96, 22) TS2304: Cannot find name 'Set'.
Error:(97, 25) TS2304: Cannot find name 'Set'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srcfacadelang.d.ts
Error:(13, 17) TS2304: Cannot find name 'Map'.
Error:(14, 17) TS2304: Cannot find name 'Set'.
Error:(78, 59) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srcfacadepromise.d.ts
Error:(2, 14) TS2304: Cannot find name 'Promise'.
Error:(7, 32) TS2304: Cannot find name 'Promise'.
Error:(8, 38) TS2304: Cannot find name 'Promise'.
Error:(9, 35) TS2304: Cannot find name 'Promise'.
Error:(9, 93) TS2304: Cannot find name 'Promise'.
Error:(10, 34) TS2304: Cannot find name 'Promise'.
Error:(11, 32) TS2304: Cannot find name 'Promise'.
Error:(11, 149) TS2304: Cannot find name 'Promise'.
Error:(12, 43) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srchttpheaders.d.ts
Error:(43, 59) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srchttpurl_search_params.d.ts
Error:(11, 16) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srcplatformrowserrowser_adapter.d.ts
Error:(75, 33) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2
ode_modulesangular2srcplatformdomdom_adapter.d.ts
Error:(85, 42) TS2304: Cannot find name 'Map'.
C:UsersarmyTikDesktopangular2
ode_modules
xjsCoreOperators.d.ts
Error:(35, 67) TS2304: Cannot find name 'Promise'.
Error:(50, 66) TS2304: Cannot find name 'Promise'.
Error:(89, 67) TS2304: Cannot find name 'Promise'.
Error:(94, 38) TS2304: Cannot find name 'Promise'.
Error:(94, 50) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2
ode_modules
xjsObservable.d.ts
Error:(46, 62) TS2304: Cannot find name 'Promise'.
Error:(47, 42) TS2304: Cannot find name 'Iterator'.
Error:(103, 74) TS2304: Cannot find name 'Promise'.
Error:(103, 84) TS2304: Cannot find name 'Promise'.
Error:(143, 66) TS2304: Cannot find name 'Promise'.
Error:(158, 65) TS2304: Cannot find name 'Promise'.
Error:(201, 66) TS2304: Cannot find name 'Promise'.
Error:(206, 38) TS2304: Cannot find name 'Promise'.
Error:(206, 50) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2
ode_modules
xjsobservableForkJoinObservable.d.ts
Error:(6, 50) TS2304: Cannot find name 'Promise'.
Error:(7, 58) TS2304: Cannot find name 'Promise'.
C:UsersarmyTikDesktopangular2
ode_modules
xjsobservableFromObservable.d.ts
Error:(7, 38) TS2304: Cannot find name 'Promise'.
Error:(7, 51) TS2304: Cannot find name 'Iterator'.
C:UsersarmyTikDesktopangular2
ode_modules
xjsobservablePromiseObservable.d.ts
Error:(9, 31) TS2304: Cannot find name 'Promise'.
Error:(10, 26) TS2304: Cannot find name 'Promise'.
解决方案 Angular 5 with Typescript ^2.0.0
This should also work the same with earlier versions of Angular 2+.
To get this to work with typescript 2.0.0, I did the following.
npm install --save-dev @types/core-js
tsconfig.json
"compilerOptions": {
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"mapRoot": "./",
"module": "es6",
"moduleResolution": "node",
"noEmitOnError": true,
"noImplicitAny": false,
"outDir": "../dist/out-tsc",
"sourceMap": true,
"target": "es5",
"typeRoots": [
"../node_modules/@types"
],
"types": [
"core-js"
]
}
More about @types with typescript 2.0.0.
- https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/
- https://www.npmjs.com/~types
Install Example:
npm install --save-dev @types/core-js
Duplicate Identifier errors
This is most likely because duplicate ecmascript 6 typings are already being imported from somewhere else most likely an old es6-shim.
Double check typings.d.ts
make sure there are no references to es6
. Remove any reference to es6
from your typings directory if you have one.
For Example:
This will conflict with types:['core-js']
in typings.json.
{
"globalDependencies": {
"core-js": "registry:dt/core-js#0.0.0+20160602141332"
// es6-shim will also conflict
}
}
Including core-js
in the types array in tsconfig.json
should be the only place it is imported from.
Angular CLI 1.0.0-beta.30
If you are using the Angular-CLI, remove the lib array in typings.json
. This seems to conflict with declaring core-js in types.
"compilerOptions" : {
...
// removed "lib": ["es6", dom"],
...
},
"types" : ["core-js"]
Webstorm/Intellij Users using the Angular CLI
Make sure the built in typescript compiler is disabled. This will conflict with the CLI. To compile your typescript with the CLI you can setup a ng serve
configuration.
Tsconfig compilerOptions lib vs types
If you prefer not to install core js type definitions there are some es6 libraries that come included with typescript. Those are used via the lib: []
property in tsconfig.
See here for example: https://www.typescriptlang.org/docs/handbook/compiler-options.html
Note: If --lib is not specified a default library is injected. The
default library injected is: ► For --target ES5: DOM,ES5,ScriptHost ►
For --target ES6: DOM,ES6,DOM.Iterable,ScriptHost
tl;dr
Short answer either "lib": [ "es6", "dom" ]
or "types": ["core-js"]
can be used to resolve can't find Promise,Map, Set and Iterator
. Using both however will cause duplicate identifier errors.
这篇关于Angular:找不到 Promise、Map、Set 和 Iterator的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文