2016-09-07 487 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安裝在項目目錄中,並確保它成功地完成現在 複製和配置你的應用程序的項目文件夾到克隆的新文件夾現在,這將很好地工作。

相關問題