安装 Angular 后,Typescript 编译器不断收到一些关于找不到Promise、Map和.Set``Iterator
Promise
Map
Set``Iterator
直到现在我都忽略了它们,但现在我需要Promise这样我的代码才能工作。
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
错误:
................ERROS OF MY CODE................. C:\Users\armyTik\Desktop\angular2\greeting_cmp.ts Error:(7, 20) TS2304: Cannot find name 'Promise'. Error:(7, 42) TS2304: Cannot find name 'Promise'. ......................................... C:\Users\armyTik\Desktop\angular2\node_modules\angular2\platform\browser.d.ts Error:(77, 90) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\application_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:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\change_detection\parser\locals.d.ts Error:(3, 14) TS2304: Cannot find name 'Map'. Error:(4, 42) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\debug\debug_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:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\di\provider.d.ts Error:(436, 103) TS2304: Cannot find name 'Map'. Error:(436, 135) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\linker\compiler.d.ts Error:(12, 50) TS2304: Cannot find name 'Promise'. Error:(16, 41) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\linker\dynamic_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:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\core\render\api.d.ts Error:(13, 13) TS2304: Cannot find name 'Map'. Error:(14, 84) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\async.d.ts Error:(27, 33) TS2304: Cannot find name 'Promise'. Error:(28, 45) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\collection.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:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\lang.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:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\facade\promise.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:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\http\headers.d.ts Error:(43, 59) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\http\url_search_params.d.ts Error:(11, 16) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\platform\browser\browser_adapter.d.ts Error:(75, 33) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\angular2\src\platform\dom\dom_adapter.d.ts Error:(85, 42) TS2304: Cannot find name 'Map'. C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\CoreOperators.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:\Users\armyTik\Desktop\angular2\node_modules\rxjs\Observable.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:\Users\armyTik\Desktop\angular2\node_modules\rxjs\observable\ForkJoinObservable.d.ts Error:(6, 50) TS2304: Cannot find name 'Promise'. Error:(7, 58) TS2304: Cannot find name 'Promise'. C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\observable\FromObservable.d.ts Error:(7, 38) TS2304: Cannot find name 'Promise'. Error:(7, 51) TS2304: Cannot find name 'Iterator'. C:\Users\armyTik\Desktop\angular2\node_modules\rxjs\observable\PromiseObservable.d.ts Error:(9, 31) TS2304: Cannot find name 'Promise'. Error:(10, 26) TS2304: Cannot find name 'Promise'.
这也应该与 Angular 2+ 的早期版本相同。
为了让它与 typescript 2.0.0 一起工作,我做了以下工作。
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" ] }
更多关于带有 typescript 2.0.0 的 @types。
安装示例:
重复标识符错误
这很可能是因为重复的 ecmascript 6 类型已经从其他地方导入,很可能是旧的 es6-shim。
仔细检查typings.d.ts确保没有引用es6. es6如果有,请从您的类型目录中删除任何引用。
typings.d.ts
es6
例如:
这将与types:['core-js']typings.json 中的冲突。
types:['core-js']
{ "globalDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160602141332" // es6-shim will also conflict } }
包含core-js在 types 数组中tsconfig.json应该是它导入的唯一位置。
core-js
Angular CLI 1.0.0-beta.30
如果您使用的是 Angular-CLI,请删除typings.json. 这似乎与在类型中声明 core-js 冲突。
typings.json
"compilerOptions" : { ... // removed "lib": ["es6", dom"], ... }, "types" : ["core-js"]
使用 Angular CLI 的 Webstorm/Intellij 用户
确保禁用内置的打字稿编译器。这将与 CLI 冲突。要使用 CLI 编译你的 typescript,你可以设置一个ng serve配置。
ng serve
Tsconfig compilerOptions lib vs types
如果您不想安装核心 js 类型定义,那么 typescript 附带了一些 es6 库。这些是通过lib: []tsconfig 中的属性使用的。
lib: []
例如,请参见此处:https ://www.typescriptlang.org/docs/handbook/compiler- options.html
注意:如果未指定 –lib,则注入默认库。默认注入的库是: --target ES5: DOM,ES5,ScriptHost–target ES6: DOM,ES6,DOM.Iterable,ScriptHost
--target ES5: DOM,ES5,ScriptHost
tl;博士
简答要么 要么"lib": [ "es6", "dom" ]可"types": ["core-js"]用于解决can't find Promise,Map, Set and Iterator. 但是,同时使用两者会导致重复的标识符错误。
"lib": [ "es6", "dom" ]
"types": ["core-js"]
can't find Promise,Map, Set and Iterator