【问题标题】:Do I need to declare all my JQuery prototypes in a JQueryStatic definition file with TypeScript?我是否需要使用 TypeScript 在 JQueryStatic 定义文件中声明我的所有 JQuery 原型?
【发布时间】:2012-10-21 16:13:43
【问题描述】:

我有以下代码:

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

function addThemePrototypes() {
    var templateSetup = new Array();
    $.fn.addTemplateSetup = function(func, prioritary)
    {
        if (prioritary)
        {
            templateSetup.unshift(func);
        }
        else
        {
            templateSetup.push(func);
        }
    };
}

当我尝试添加以下内容时:

  $('a').addTemplateSetup(

在同一个文件中,我注意到没有智能感知,打字稿似乎不知道我刚刚添加的 addTemplateSetup 原型。

这是让它工作的正确方法还是我总是需要将诸如 addTemplateSetup 的定义之类的内容添加到 JQueryStatic 定义文件中,然后将其包含在内?

【问题讨论】:

    标签: javascript jquery typescript


    【解决方案1】:

    您需要以某种方式声明它以使 Typescript 不会抱怨,最简单的方法是将其声明为 any:

    interface JQuery {
        addTemplateSetup: any;
    }
    

    但要获得最佳智能感知支持,还要添加有关参数类型的信息:

    interface JQuery {
        addTemplateSetup: (func: Function, priority: bool) =>void;
    }
    

    【讨论】:

    • 感谢您的帮助。打字稿是否不可能从文件中推断出信息,或者如果我在定义原型时向原型添加了参数类型,它是否只能推断出信息?还有一个问题。我一直在声明这样的接口 JQuery { addTemplateSetup(); }。这与您使用 :any 的第一个声明有区别吗?
    • 是的,您不需要显式添加 :any,如果没有声明类型,则暗示它。通过添加 (),您可以将其定义为一个函数(带有任何参数),这样您就不仅仅是将其定义为 :any。 Typescript 不知道 jQuery js 内部结构。我想如果你重写 Jquery 的一部分,因为 Typescript 可以自动从 $.fn-information 中找到信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多