TypeScript中JQuery和JQueryStatic接口有什么区别?

5

有人能解释一下吗?我知道jQuery接口是预定义的,但是JQueryStatic是什么?

我有以下代码:

(function($)
{

    $.fn.disableBt = function()
    {
        $(this).attr('disabled', true);
        if ($.browser.msie && $.browser.version < 9)
        {
            $(this).addClass('disabled');
        }
    }

})(jQuery);

唯一让 TypeScript 知道这一点的方法是将其添加到 jQuery 接口中,如下所示:

    disableBt();
}

我尝试将它添加到jQueryStatic中,但似乎没有起作用:
interface JQueryStatic {
  modal( options );
  disableBt();
}

这是我的模态框中选项的定义方式:
```html

这是我在模态框中定义选项的方式:

```
$.modal.defaults = {
    content: false,
    useIframe: false,
    ...
    ...
var settings = $.extend({}, $.modal.defaults, options),
1个回答

8

"options"(在modal(options)中)是否已定义?

JQueryStatic接口具有静态方法(“$和jQuery本身”上的方法)

JQuery接口具有可在jQuery元素上运行的成员,其中许多成员返回JQuery自身以实现链式调用。

interface JQueryStatic {
    someAdditionalMethod(): any;
}
$.someAdditionalMethod();

interface JQuery {
    pluginMethod(): JQuery;
}
$("body").pluginMethod();

如果你的情况类似于这样:
interface ModalDefaultOptions {
    content?: bool;
    useIframe?: bool;
}

interface JQueryStatic {
    modal: {
        defaults: ModalDefaultOptions;
    };
}

interface JQuery {
    disableBt(): void; // or :JQuery if you returned 'this' from the function 
}

$("#someButton").disableBt();
$.modal.defaults.content = false;

@jeoriks - 我刚刚在我的问题中添加了选项的声明/定义方式。我不确定如何或者是否可以用 TypeScript 添加该定义信息。这是可能的吗?如果我声明 foo(): any,那么它将允许 foo 的任何参数组合,并且 TypeScript 不会对它们进行检查,这种说法正确吗? - user1679941
根据你所说的,我应该只需要扩展JQueryStatic接口,而不需要扩展JQuery接口,这样说对吗? - user1679941
啊,抱歉,我误读了原始问题。我现在更新了我的答案。我会先将成员定义为任何类型(modal:any),看看它是否按预期工作,然后再添加详细类型。 - joeriks
请注意,如果您正在使用模块,请勿将 JQuery 接口声明放在模块内。它必须位于全局顶级命名空间中,否则您将定义自己的 JQuery 接口而不是合并到 $ 中。 - Simon_Weaver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接