2016-09-07 117 views
1

我的项目目前正在使用Angular RC4的Ionic2 Beta 11。问题是,我需要链条如下(我用的插件返回一个承诺):Typescript错误:找不到名字'Promise'

this.dataService.loginWithFacebookNative() 
    .then(
     result => { 
      console.log(result) 
      return result; 
     }, 
     error => { 
      console.log(error); 
      if (error == 'cordova_not_available') return this.dataService.loginWithFacebook(); 

      return Promise.reject(error.message || error); // Here is the ts error 
     }) 
    .then(value => { 
     console.log(value); 
     // Logic if login was a success 
    }) 
    .catch(error => { 
     console.log(error); 
     if (error) { 
      this.error = error; 
     } 
    }) 

虽然应用程序本身是否按预期运行,打字稿将返回一个错误,指出

[ts] Cannot find name 'Promise'

我不确定从哪里得到承诺。

+0

有几种类型可以提供Promise,es6-promise和core-js是我们想到的两种。我知道Angular quick-start/tutorials使用core-js。我不确定Ionic框架使用什么,但您可以从其中一个开始。 –

回答

0

I am not sure where to get Promise from.

最快的办法是lib设置为es6,dom编译。

更多

https://basarat.gitbooks.io/typescript/content/docs/types/lib.d.ts.html#lib-option

替代

  • 在es6.promise.d.ts带来
  • 目标ES6(绝对不是你想在目前的JavaScript引擎是什么)。但如果使用另一个像babel这样的转译器(我建议不要这样复杂的工作流)。
+0

不知道该怎么做。我试着运行'tsc --target es5 --lib dom,es6 ',同样的错误仍然显示 – julianalimin

0

有两个选项

  1. 从DefinitelyTyped添加打字:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/es6-promise/es6-promise.d.ts
  2. 选择的ECMAScript版本6打字稿生成。这需要符合ECMAScript 6的JavaScript引擎。
+0

我该如何做选项1? 我试着'typings安装dt〜es6-promise --global --save'和'npm install --save es6-promise',但它仍然显示出问题。 – julianalimin

+0

它是从typcript构建还是在运行时的错误?您可以尝试手动将定义文件添加到您的项目中。下载es6-promise.d.ts将它放入{ProjectRoot} \ Definition_Files \ typings \ es6-promise \ es6-promise.d.ts(你可以放在任何地方,但这通常是打字的地方) –

+0

它的错误是在我的编辑器(Visual Studio Code)中显示。但是代码正如预期的那样工作。 – julianalimin

0

如果您遇到无法找到名称'Promise'的情况,那么您通常会更改基本设置中的某些文件,或者您可能未成功完成节点包安装。 Angular2不再使用打字包。

解决方案:

克隆以下库https://github.com/angular/quickstart 运行NPM安装在项目目录中,并确保它成功地完成现在 复制和配置你的应用程序的项目文件夹到克隆的新文件夹现在,这将很好地工作。

相关问题