TypeScript Jquery Promise 参数不匹配

Posted

技术标签:

【中文标题】TypeScript Jquery Promise 参数不匹配【英文标题】:TypeScript Jquery Promise parameter mismatch 【发布时间】:2013-01-06 05:39:34 【问题描述】:

我正在使用 TypeScript 0.8.2 和来自 https://github.com/borisyankov/DefinitelyTyped/tree/master/jquery 的最新 JQuery 1.9 .d.ts 定义

为了隔离问题,我有一个简单的 TypeScript 类定义,它尝试使用 .when() 和 .then() 语法进行单个 $.ajax 调用。这是我的代码:

/// <reference path="../../jquery.d.ts" />

module Demo 

    // Class
    export class TestDeferred 
        // Constructor
        constructor() 

            $.when(this.testAjaxCall()).then((data, status, jqXHR: JQueryXHR) => 
                alert(jqXHR.statusText);
            );

            $.when($.ajax("test.htm")).then(() => 
                console.log("yay");
            );
        

        testAjaxCall() 
            return $.ajax("Test.aspx");
        
    

在这两个测试用例中,我都收到一个编译时错误:

提供的参数与调用目标的任何签名都不匹配,红色波浪线位于 .when() 方法的第一个参数上。他是截图:

据我所知,.d.ts 文件中的 .when() 方法具有 .when(options: any) 的重载,并且 .ajax 被定义为实现 JQueryPromise 接口的 JQueryXHR 类型.

理论上这应该可以正常工作,因为它反映了 .when() http://api.jquery.com/jQuery.when/ 的 jQuery 文档

$.when( $.ajax("test.aspx") ).then(function(data, textStatus, jqXHR)
     alert( jqXHR.status ); // alerts 200
);

那么我错过了什么?我定义错了吗?

【问题讨论】:

Unrelated:你是如何得到 VS 的那个好看的深色主题的?你有下载页面的链接或某处的指南吗? :) 这不是 2012 年 VS Dark 主题的默认外观吗?也许它是一个加载项。 【参考方案1】:

jQuery 的类型文件中可能存在细微错误。以下作品:

$.when( $.ajax("test.aspx") ).then(function(data, textStatus, jqXHR)
     alert( jqXHR.status );
, null);

这是因为类型文件希望您同时传递成功处理程序和失败处理程序。我将检查文档并更新定义以表明失败处理程序是可选的。

更新

我已经提交了对 jQuery 类型定义的以下更改:

then(doneCallbacks: any, failCallbacks: any, progressCallbacks?: any): JQueryPromise;

改为

then(doneCallbacks: any, failCallbacks?: any, progressCallbacks?: any): JQueryPromise;

【讨论】:

请求已合并,可在:github.com/borisyankov/DefinitelyTyped/blob/master/jquery/… 是的。这个新文件完全解决了我的问题。谢谢!

以上是关于TypeScript Jquery Promise 参数不匹配的主要内容,如果未能解决你的问题,请参考以下文章

Typescript:Promise 的子类/扩展:不引用 Promise 兼容的构造函数值

typescript async函数必需返回promise么

TypeScript Promise 语法

Axios、Typescript 和 Promise

如何等待 JavaScript/TypeScript 中的 Promise 列表?

TypeScript - 等待 observable/promise 完成,然后返回 observable