重载jQuery构造函数以使用自己的对象

时间:2015-10-09 10:18:14

标签: jquery constructor typescript overloading

我对TypeScript很新,不确定这是否可行。 我的应用程序使用jQuery。要创建新的JQuery我可以使用:

var $someElement = $("#someString");

我有一个定义的对象,看起来像这样:

class HtmlElementId {
    private idPrefix: string = "#";

    id: string;

    constructor(id: string) {
        this.id = id;

        if (id.indexOf(this.idPrefix) !== 0) {
            this.id = this.idPrefix + id;
        }
    }
}

我想以某种方式重载JQuery构造函数来制作类似这样的东西

$(idElement : HtmlElementId){
    return $(idElement.id);
}

所以我可以在像

这样的代码中使用它
var myIdElement = new HtmlIdElement("someString");

var $someElement = $(myIdElement); // <- this is what I want

问题:这可能吗?如果是这样,怎么能实现呢?

2 个答案:

答案 0 :(得分:0)

不是100%肯定,但我认为这样的事情可能会起作用

var $ = (id: string) => {
    return new HtmlIdElement(id);
}

$("test")

虽然我确实感觉现在使用jQuery时你可能需要我们jQuery(“”)而不是$(“”),因为你用你自己的定义替换$

答案 1 :(得分:0)

您需要使用Declaration Merging扩展JQueryStatic界面。

在您的情况下,代码很简单:

interface JQueryStatic {
    (idElement: HtmlElementId): JQuery;
}

您可以将此添加到以这种方式使用jQuery的每个.ts文件或其owd d.ts文件中。

在后一种情况下,您可以用您自己的文件替换对jquery.d.ts的所有引用,编译器将传递搜索d.ts文件。