【问题标题】:Typescript Error: Cannot find name 'Promise'打字稿错误:找不到名称“承诺”
【发布时间】:2016-11-21 16:57:52
【问题描述】:

我的项目目前在带有 Angular RC4 的 Ionic2 Beta 11 上。问题是我需要如下链接(我使用的插件返回一个承诺):

    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;
        }
    })

虽然应用程序本身按预期工作,但 Typescript 返回错误提示

[ts] Cannot find name 'Promise'

我不确定从哪里获得 Promise。

【问题讨论】:

  • 有几种类型可以提供 Promise,es6-promise 和 core-js 是我想到的两个。我知道 Angular 快速入门/教程使用 core-js。我不确定 Ionic 框架使用什么,但您可以从其中之一开始。

标签: angular typescript ionic2


【解决方案1】:

我不知道从哪里得到 Promise。

最快的方法是将lib 设置为es6,dom 进行编译。

更多

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

替代方案

  • 引入 es6.promise.d.ts
  • target es6(在当前的 javascript 引擎上绝对不是你想要的)。但是如果使用像 babel 这样的另一个转译器也可以使用(我建议不要使用如此复杂的工作流程)。

【讨论】:

  • 不知道该怎么做。我尝试运行tsc --target es5 --lib dom,es6 ,但仍然显示相同的错误
【解决方案2】:

有两种选择

  1. 添加来自definitelyTyped 的输入:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/es6-promise/es6-promise.d.ts
  2. 在 TypeScript Build 中选择 ECMAScript 版本 6。这需要兼容 ECMAScript 6 的 javascript 引擎。

【讨论】:

  • 我将如何做选项 1?我尝试了 typings install dt~es6-promise --global --save 和 'npm install --save es6-promise' 但它仍然显示问题。
  • 是打字稿构建错误还是运行时错误?您可以尝试手动将定义文件添加到您的项目中。下载 es6-promise.d.ts 并将其放在 {ProjectRoot}\Definition_Files\typings\es6-promise\es6-promise.d.ts 中(您可以将其放在任何地方,但通常是打字的地方)
  • 这是一个错误,显示在我的编辑器(Visual Studio Code)中。但是代码按预期工作。
  • 好的,所以只是打字错误。你有没有从上面的评论中尝试过我的解决方案?
  • 我确实使用typing install dt~es6-promise --global --save 和 'npm install --save es6-promise' 进行了尝试,但两者都不起作用
【解决方案3】:

如果您遇到找不到名称“Promise”的情况,主要是您更改了基本设置中的一些文件,或者您可能没有成功完成节点包安装。 Angular2 不再使用 typings 包了。

解决方案:

克隆以下存储库https://github.com/angular/quickstart 在项目目录中运行 npm install 并确保它成功完成 现在将您的应用项目文件夹复制并配置到克隆的新文件夹中,现在这将完美运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2016-12-31
    • 2023-03-17
    • 2017-12-01
    • 1970-01-01
    • 2019-04-30
    • 2018-11-09
    相关资源
    最近更新 更多