Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在typescript中定义jQuery对象?_Javascript_Typescript - Fatal编程技术网

Javascript 如何在typescript中定义jQuery对象?

Javascript 如何在typescript中定义jQuery对象?,javascript,typescript,Javascript,Typescript,我有以下代码: var modal = { content: '', form: '', $form: '', $message: '', $modal: '', $submits: '', href: '' } $.modal = function (options) { var settings = $.extend({}, $.modal.defaults, options), root = getModal

我有以下代码:

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');
我得到一个指向的错误。找到并说:

类型为“string”的变量上不存在属性find。我理解错误的含义,但如何将
$modal
定义为可以使用
的变量。查找
on


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

您的代码对
$进行的函数赋值。我认为modal
是不完整的——但是,既然您专门询问定义类型,我还是会尝试回答

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

///<reference path="jquery.d.ts" />
第二个接口声明,
JQueryStatic
,简单地声明另一个静态成员,该成员可以在
$
对象上访问(请参见脚注),因为
$
在jquery.d.ts文件中实现了
JQueryStatic

interface JQueryStatic {
    modal : any;
};
有了这个功能,您现在可以创建具有显式类型信息的模态对象,该信息由它实现的
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');

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

为什么要将
modal.$modal
初始化为字符串(如果不是)?如果我没有错的话,TypeScript的全部目的就是要有一个更严格的类型系统。@Felix-但这是我的问题。我不确定如何初始化modal.$modal。我想让它保存一个jQuery对象,但我不知道怎么做。TBH我不熟悉TypeScript,但您肯定不会初始化一个应该保存一个空字符串的jQuery对象的属性。也许这会有所帮助:您的
$.modal
代码块在语法上看起来并不正确-开始括号和结束括号不匹配。如果你能解决这个问题,我也许能回答你的问题。
modal.$form = modal.$modal.find('.form');