【问题标题】:I get: [ts] 'Promise' only refers to a type, but is being used as a value here我得到:[ts] 'Promise' 仅指一种类型,但在这里被用作一个值
【发布时间】:2017-08-16 12:23:45
【问题描述】:

我正在学习 Angular2 课程并继续学习。到目前为止,我为所有其他练习所做的一切都运行良好,直到我开始创建这个自定义验证器和这个 Promise 代码。我不明白为什么现在会发生这种情况。

我明白了:[ts] 'Promise' 仅指一种类型,但在这里用作值。

似乎无法解决此问题。即使没有添加 setTimeout 函数,我也会收到错误消息。

根据其他人的建议。我添加到 tsconfig.json 中: “编译器选项”:{ ... “类型”:[“核心-js”] }

但我仍然得到错误。

使用 Visual Studio 代码:版本 1.10.1。 操作系统:Windows 10 专业版。

这是我的代码:

import {Control} from 'angular2/common';

export class UsernameValidators 
{
    static shouldBeUnique(control: Control) 
    {
       return new Promise((resolve, reject) =>
       {            
          setTimeout(function()
          {
             if (control.value == "Dan")
                resolve({ shouldBeUnique: true });
             else
                resolve(null);
          }, 1000);
       });
   }
}

这是我正在学习的课程和我被指示要做的事情的屏幕截图。智能感知与我的不同。它工作正常,他们没有得到我得到的错误。

这是课程的最终结果。

【问题讨论】:

  • 我看到你在 VSCode repo 上的一个线程中问过这个问题(我假设是你,因为问题与这里的字面意思相同)。您是否尝试过 npm 解决方案?需要编译成 ES6 吗?
  • 不,我没有在那个线程上问这个。然而,我确实在那里看到了类似的东西。 github.com/Microsoft/vscode/issues/21968
  • 不,我没有尝试 npm 解决方案,因为我是新手,因此犹豫不决。我只是在学习这方面的课程并继续学习。但是,我确实尝试了向 tsconfig.json 文件添加条目的建议。但这并没有解决它,所以我退出了。
  • 是的,实际上我确实在那个线程上问过这个问题。我忘了我确实忽略了上面关于那个的评论。
  • 您是否尝试在tsconfig.json compilerOptions 中设置lib:["es6"]

标签: angular


【解决方案1】:

#43546088 的可能重复项(仅当您已经在使用 DefinitelyTyped 时):如果您不是,我建议您尝试使用它们,以便您可以规范您的编译器引用并可能解决问题.

如果您正在使用它,我建议您阅读this Github thread 以对问题进行广泛分析并提供一些解决方法。为了快速回顾(恕我直言)其中最好的一个,假设您的 package.json 文件中有这个:

  "scripts": {
    "postinstall": "typings install dt~core-js --global"
  }

按以下方式更改:

  "scripts": {
    "postinstall": "typings install dt~core-js@0.9.7+20161130133742 --global"
  }

因此,您将强制 VS 获取 core-js 定义文件的不受影响的版本/构建。但是,强烈建议在问题发布后立即删除显式版本+构建引用。

有关此问题的更多信息,您也可以在我的博客上read this post

【讨论】:

    【解决方案2】:

    你需要以 ES6 为目标,或者使用像 bluebird 这样的 polyfill 库。如果您在编译器输出中以 ES5 为目标,那么它将像这样失败,因为 ES5 没有 Promises。

    【讨论】:

    • 在 VS Code 中,我还必须在命令面板中执行命令“TypeScript: Reload Project”,以便 VS Code 停止抱怨。
    猜你喜欢
    • 2018-01-14
    • 2019-07-30
    • 2020-06-05
    • 2018-12-30
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多