我正在学习Angular2课程并继续学习。到目前为止,我为其他所有练习所做的一切都运行良好,直到我创建了这个自定义验证器和这个Promise代码。对我来说没有任何意义,为什么现在会发生这种情况。
我得到:[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);
});
}
}
这是我正在拍摄的课程,以及我被指示做的屏幕截图。智能与我的不同。它工作正常,他们没有得到我得到的错误。
这是课程的最终结果。
答案 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。