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');