【问题标题】:jquery promise and typescriptjquery 承诺和打字稿
【发布时间】:2018-12-19 02:15:01
【问题描述】:

从其他开发人员那里得到项目,他们已经正确编译,我在“return deferred.promise()”行的打字稿中有一个错误。

类型“JQueryPromise”不可分配给类型“JQueryPromise”。

export function promise<T>(resolver: (resolve: (data: T) => void, reject: (error: any) => void) => void): JQueryPromise<T> {
    const deferred = $.Deferred();
    resolver(
        data => {
            deferred.resolve(data);
        },
        ex => {
            deferred.reject(ex);
        }
    );
    return deferred.promise();
}

这样的错误很多,所以我认为问题不在于代码,而在于某些配置,可能是什么问题?

【问题讨论】:

  • 您使用的@types/jquery 版本是什么?我无法在全新安装时重现该错误。
  • jquery.d.ts:jQuery 1.10.x / 2.0.x 的类型定义
  • 我在询问包的确切版本,如package.json 中所述。
  • id="jquery.TypeScript.DefinitelyTyped" version="2.8.8"

标签: jquery typescript promise


【解决方案1】:

对于不使用泛型的代码,我得到了几乎相同的错误消息,但不是

类型“JQueryPromise”不可分配给类型“JQueryPromise”

它说

类型“JQueryPromise”不可分配给类型“IAccountSettings”。

其中 IAccountSettings 显然是我的类型,或者在这种情况下,是一个接口。基于上面 Cerberus 的出色回答,我更改了 deferred 的声明,只需输入特定类型:

public get(): JQueryPromise<IAccountSettings> {
var deferred = $.Deferred<IAccountSettings>();

【讨论】:

    【解决方案2】:

    看来您只需要将正确的类型传递给Deferred 工厂。此代码编译:

    export function promise<T>(resolver: (resolve: (data: T) => void, reject: (error: any) => void) => void): JQueryPromise<T> {
        const deferred = $.Deferred<T>(); // here we used generic type for Deferred
        resolver(
            data => {
                deferred.resolve(data);
            },
            ex => {
                deferred.reject(ex);
            }
        );
        return deferred.promise();
    }
    

    不过,我不能确定这个问题是否会干扰 .NET 细节。

    【讨论】:

      猜你喜欢
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      相关资源
      最近更新 更多