Sta*_*lfi 170 javascript typescript angular
安装角之后,打字稿编译器不断收到一些错误约没有找到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
Run Code Online (Sandbox Code Playgroud)
错误:
................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'.
Run Code Online (Sandbox Code Playgroud)
Kri*_*eck 176
这也应该与早期版本的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"
]
}
Run Code Online (Sandbox Code Playgroud)
有关@types与typescript 2.0.0的更多信息.
安装示例:
npm install --save-dev @types/core-js
Run Code Online (Sandbox Code Playgroud)
重复的标识符错误
这很可能是因为重复的ecmascript 6类型已经从其他地方导入,很可能是旧的es6-shim.
仔细检查typings.d.ts确保没有参考es6.es6如果您有,请从您的typings目录中删除任何引用.
例如:
这将与types:['core-js']typings.json 冲突.
{
"globalDependencies": {
"core-js": "registry:dt/core-js#0.0.0+20160602141332"
// es6-shim will also conflict
}
}
Run Code Online (Sandbox Code Playgroud)
包含core-js在types数组中tsconfig.json应该是它唯一导入的地方.
Angular CLI 1.0.0-beta.30
如果您使用的是Angular-CLI,请删除中的lib数组typings.json.这似乎与在类型中声明core-js相冲突.
"compilerOptions" : {
...
// removed "lib": ["es6", dom"],
...
},
"types" : ["core-js"]
Run Code Online (Sandbox Code Playgroud)
使用Angular CLI的Webstorm/Intellij用户
确保禁用内置的typescript编译器.这将与CLI冲突.要使用CLI编译您的打字稿,您可以设置ng serve配置.
Tsconfig compilerOptions lib vs types
如果您不想安装核心js类型定义,那么typescript中包含一些es6库.这些是通过lib: []tsconfig中的属性使用的.
请参阅此处:https://www.typescriptlang.org/docs/handbook/compiler-options.html
注意:如果未指定--lib,则会注入默认库.注入的默认库是:►For--target ES5:DOM,ES5,ScriptHost►For--target ES6:DOM,ES6,DOM.Iterable,ScriptHost
TL;博士
简短的回答"lib": [ "es6", "dom" ]或者"types": ["core-js"]可以用来解决can't find Promise,Map, Set and Iterator.但是,使用它们会导致重复的标识符错误
Dan*_*eng 75
我也有同样的问题 - "未找到承诺" - 当代码想要创建一个Promise对象时.
尝试在stackoverflow上找到一些解决方案,包括取出System.config({...})以形成system.js并将其包含在index.html中的解决方案.
最后我解决了这个问题.问题是,在index.html中,包含了es6-shim.min.js.但是,在tsconfig.json中,"compilerOptions"下的"target"属性的值为"es5".在我将其更改为"es6"后,错误消失了.
Pan*_*kar 63
每次更新es6-shim不支持,现在,如果你有安装在一起的两条分型es6-shim和core-js在一起.es6-shim通过在tsconfig.json中提及删除键入.您现在可以参考下面的core-js输入以获得es5支持main.ts
///<reference path="./../typings/globals/core-js/index.d.ts"/>
Run Code Online (Sandbox Code Playgroud)
tsconfig.json
exclude: [
"node_modules", //<-- this would be needed in case of VS2015
"node_modules/@typings",
"typings"
]
Run Code Online (Sandbox Code Playgroud)
你只需要设置"target"属性es6,然后所有将错误消失.并且转换后的代码将采用es6格式化.
Nic*_*sta 42
TLDR;
透明到es6
透明到es5
对于读者:
tsconfig.json:
{
"compilerOptions": {
"target": "es6",
"module": "system",
"moduleResolution": "node",
...
},
"exclude": [
"node_modules",
"jspm_packages"
]
}
Run Code Online (Sandbox Code Playgroud)
请记住,uglifyjs目前不支持es6.这可能会影响您制作生产包.
tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
...
},
"exclude": [
"node_modules",
"jspm_packages"
]
}
Run Code Online (Sandbox Code Playgroud)
安装打字,然后安装es6-shim:
npm install typings --saveDev
typings install dt~es6-shim --global --save
Run Code Online (Sandbox Code Playgroud)
如果你走这条路,你需要确保typescript编译器可以找到.d.ts文件.
您有两种选择:
一个.确保您的tsconfig.json与typings文件夹处于同一级别.
湾 在main.ts文件中包含一个引用,其中您的angular2应用程序是自举的.
注意:请勿使用exclude标志排除typings文件夹.
project
|-- src
|-- node_modules
|-- package.json
|-- typings
|-- tsconfig.json
Run Code Online (Sandbox Code Playgroud)
如其他答案所示,Angular不再包含此文件
main.ts:
/// <reference path="../../typings/globals/es6-shim/index.d.ts" />
Run Code Online (Sandbox Code Playgroud)
这对我有用.
检查是否存在typings.json文件,
它看起来像这样,
Run Code Online (Sandbox Code Playgroud){ "globalDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160317120654", "jasmine": "registry:dt/jasmine#2.2.0+20160505161446", "node": "registry:dt/node#6.0.0+20160613154055" } }
全局安装打字包.
sudo npm install -g typings
Run Code Online (Sandbox Code Playgroud)
安装打字后,运行
typings install
Run Code Online (Sandbox Code Playgroud)
然后重启服务器.
当Typescript> = 2时,tsconfig.json中的"lib"选项将完成这项工作.不需要打字.https://www.typescriptlang.org/docs/handbook/compiler-options.html
{
"compilerOptions": {
"target": "es5",
"lib": ["es2016", "dom"] //or es6 instead of es2016(es7)
}
}
Run Code Online (Sandbox Code Playgroud)
由于Angular 2进入RC 0,/ angular2 /typings/broowser.d.ts不再是Angular 2发行版的一部分.该文件可以单独安装.
从这里:https: //github.com/angular/angular/issues/8513有几个选项.对我有用的是:
typings install es6-shim --ambient --save
// In your app.ts
/// <reference path="typings/browser.d.ts" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112582 次 |
| 最近记录: |