当前位置: 首页 > 知识库问答 >
问题:

如何在打字稿中定义jQuery对象?

荀靖
2023-03-14

我有以下代码:

var modal = {
    content: '',
    form: '',
    $form: '',
    $message: '',
    $modal: '',
    $submits: '',
    href: ''
}

$.modal = function (options) {
    var settings = $.extend({}, $.modal.defaults, options),
        root = getModalDiv(),
    function getModalDiv() {
        var modal = $('#modal');
        return modal;
    };
})(jQuery);

modal.$modal = $.modal({
    title: link.title,
    closeButton: true,
    content: modal.content,
    onClose: onModalClose,
    minWidth: 315,
    maxHeight: false,
    width: false,
    resizeOnLoad: true
});
modal.$form = modal.$modal.find('.form');

我遇到一个错误,指向.find并说:

“字符串”类型的变量中不存在属性find。我知道错误在说什么,但是我如何将< code>$modal定义为一个我可以使用< code >的变量。查找于?

同样,现在我在typescript世界里,有没有更好的方法来定义modal,而不是在这里将它定义为var?

共有1个答案

牧信厚
2023-03-14

代码对$的函数赋值。我认为model</code>是不完整的——然而,由于您特别询问了定义类型的问题,我还是会尝试回答。

所以,首先,如果您还没有:从codeplex获取jquery.d.ts,并在您的代码中引用它,如下所示。它将为您提供jQuery的类型声明,这在使用该库时非常有用。它还允许您定义应该是jQuery对象的成员。

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

例如,看一下<code>IModal</code>,它是一个有4个jQuery成员的接口(我猜了一下你想在其他成员上使用什么类型——它们可能不是你想要的):

interface IModal {
    content : string;
    form    : HTMLFormElement;
    $form   : JQuery;
    $message: JQuery;
    $modal  : JQuery;
    $submits: JQuery;
    href    : string;
}

第二个接口声明,JQueryStics,简单地声明了另一个可以在$对象上访问的静态成员(参见脚注),因为$在jquery.d.ts文件中实现了JQuerySt的

interface JQueryStatic {
    modal : any;
};

有了这些,您现在就可以创建带有显式类型信息的模态对象,这些信息由它实现的< code>IModal接口提供:

var modal : IModal = {
    content : '',
    form    : null,
    $form   : null,
    $message: null,
    $modal  : null,
    $submits: null,
    href    : ''
}

你可以根据 JQueryStatic 附加组件将你的函数分配给 $.modal:

$.modal = function (options) {
    var settings = $.extend({}, $.modal.defaults, options),
        root = getModalDiv(),
        getModalDiv = function() {
            var modal = $('#modal');
            return modal;
        };

    ...
})(jQuery);

准备好之后,如果您更正了这个赋值,下面一行应该就可以了:

modal.$form = modal.$modal.find('.form');

注意:我在向现有接口添加成员方面的经验充其量是不确定的——通常编译器出于任何原因都不会选择它们。我发现,随着代码库的增长,这种情况更可能发生,因此很难找出确切的原因。只是需要注意的事情。

 类似资料:
  • 我的代码: 错误消息来自TypeScript(3.0)编译器: TS2322:类型“string[]”不可分配给类型“[string, string, string, string, string, string, string]”。“string[]”类型中缺少属性“0”。 如果我将字符串[]更改为只读数组 TS2322:“ReadonlyArray”类型不能分配给类型“[string,stri

  • 我想知道最好的方法,比如我有两个物体 如果objectC由创建 我如何声明/描述objectC,以便编译器/IDE知道它同时具有objectA和objectB的属性? 我想找到一种不需要为objectA和objectB定义接口的方法。我不想为同一个属性写两次声明和定义/求值。如果我在一个对象上有太多的属性,这种冗余是很重要的。 (是否有一个运算符可以提取现有对象的接口/类型?) 可能吗?

  • 我在AngularJS 1.X项目上使用Typescript。我出于不同的目的使用不同的Javascript库。为了对我的源代码进行单元测试,我想使用类型(= 接口)存根一些依赖项。我不想使用 ANY 类型,也不想为每个接口方法编写一个空方法。 我正在寻找一种方法来做这样的事情: 我现在的痛苦是,我要么使用< code>any并实现我的测试用例中调用的所有方法,要么实现接口并实现完整的接口。那太多

  • 我正在努力寻找 有什么不同?

  • 问题内容: 我想为我的纯功能组件定义,但出现类型错误: 我知道我可以这样写: 有没有更好的添加方法? 问题答案: 您可以这样输入: 然后,你可以写,而无需强制转换的类型(会)。

  • 我想实现这样的目标: 下面是我不想做的一个例子(我真的很讨厌JS中的重载黑客): 如何在TypeScript语言中做方法重载?