我得到:[ts]'Promise'只引用一个类型,但在这里被用作值

时间:2017-03-23 18:53:37

标签: angular

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

enter image description here

我得到:[ts]'Promise'仅指一种类型,但在这里被用作值。

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

根据其他人的建议。我添加到tsconfig.json: “compilerOptions”:{ ... “类型”:[“core-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);
       });
   }
}

这是我正在拍摄的课程,以及我被指示做的屏幕截图。智能与我的不同。它工作正常,他们没有得到我得到的错误。

enter image description here

这是课程的最终结果。

enter image description here

2 个答案:

答案 0 :(得分:3)

您需要定位ES6,否则使用像bluebird这样的polyfill库。如果您在编译器输出中定位ES5,那么它将会失败,因为ES5没有Promises。

答案 1 :(得分:1)

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

如果您正在使用它,我建议您阅读this Github thread以获取对该问题的广泛分析以及一些解决方法。要快速回顾(IMHO)其中最好的一个,假设你在 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