如何解决编译错误

How to resolve compile error

将js文件转换为ts文件后,出现编译错误:

Type '() => Promise<{}>' is not assignable to type 'Promise<{}>'.
Property 'fin' is missing in type '() => Promise<{}>'.  

这是代码:

system.defer = function(action) {
    var deferred = Q.defer();
    action.call(deferred, deferred);
    var promise = deferred.promise;
    deferred.promise = function() { return promise; }; //Error here
    return deferred;
};

这条错误消息在说什么?我应该怎么做才能解决?

此代码来自 page,它是 DurandalJS 的一部分。

代码有效。如果我将其注释掉,它会破坏应用程序。我不确定它要做什么。

根据您从 DurandalJS 链接到的页面,它需要 jQuery 承诺,如果您真的愿意,可以用 Q 交换。

jQuery deferred 需要一个函数 promise(参见 doc),而 Q 有一个 属性 调用 promise 所以为了让 DurandalJS 正常工作,它需要它是一个函数,这正是它所期望的。

您可以通过如下所示的转换修复您遇到的错误

deferred.promise = <any>function() { return promise; };