是否可以使用TypeScript对jQuery.fn.extend进行建模

我的猜测是,答案是“不”,但我想检查一下我没有错过的东西。

jQuery有一个fn.extend方法,它允许你用额外的方法来扩充jQuery对象。 以下是API文档的一个示例:

jQuery.fn.extend({
  check: function() {
    return this.each(function() {
      this.checked = true;
    });
  },
  uncheck: function() {
    return this.each(function() {
      this.checked = false;
    });
  }
});

// Use the newly created .check() method
$( "input[type='checkbox']" ).check();

我一直在填写jQuery JSDoc并测试DefinitelyTyped项目。 以前,jQuery.fn被定义为any 。 为了使它符合我一直在寻找的文档,将其改为覆盖extend方法:

fn: {
    /**
     * Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods.
     * 
     * @param object An object to merge onto the jQuery prototype.
     */
    extend(object: any): any;
}

但是,我不认为在TypeScript中有一种方法来模拟动态方法而不是静态方法。 这意味着在您的TS中不可能随后使用这些动态增强的方法,除非您:

  • 将jQuery投射到any
  • 使用括号符号像$("input[type='checkbox']")["check"]();
  • 所以我的问题:我有没有错过? 有没有更好的方法来建模jQuery.fn所以TypeScript可以拿起jQueryStatic获取这些动态方法? 正如我所说,我认为答案是“不”,但我想确定。


    这是一个明确的否定。

    在定义内的编译器中执行代码会很好,但不存在这样的语法。 这是我所希望的:

    
    interface Foo{
       bar(member:any):any @ execute { // execute this code inside the compiler language service:
           var keys = compiler.getArgs().keys();
           compiler.getIdentifier('JQueryStatic').addMembers /// you get the point.
       }
    }
    

    但它有可能使编辑变得缓慢,并且会充满边缘案例,更不用说它提供的更多工作了,而这些工作并不在我预计的范围之内。

    链接地址: http://www.djcxy.com/p/18553.html

    上一篇: Is it possible to model jQuery.fn.extend using TypeScript

    下一篇: Object Oriented Approach in Codeigniter Model