7

我正在使用以下代码:

$('html, body').animate({ scrollTop: $($(this).attr('href')).offset().top });

打字稿给我一条错误消息说:

The property 'top' does not exist on value of type 'Object'

我猜想 jQuery 定义文件中缺少一些东西。有没有其他人看到过这个问题,或者这是不是 jQuery 通常不使用的东西?这是我以前从未见过的。

了解更多信息。这是使用它的代码:

   $.fn.buildTableOfContent = function () {
        "use strict";
        var h2 = this.find('h2');
        if (h2.length > 0) {
            var h1 = this.find('h1:first');
            if (h1.length === 0) {
                h1 = this.prepend('<h1>Help</h1>').children(':first');
            }
            var menu = h1.wrap('<div class="h1 with-menu"></div>')
                    .after('<div class="menu"><img src="/Content/images/menu-open-arrow.png" width="16" height="16"><ul></ul></div>')
                    .next().children('ul');
            h2.each(function (i) {
                this.id = 'step' + i;
                menu.append('<li class="icon_down"><a href="#step' + i + '">' + $(this).html() + '</a></li>');
            });
            menu.find('a').click(function (event) {
                event.preventDefault();
                $('html, body').animate({ scrollTop: $($(this).attr('href')).offset().top });
            });
        }
        return this;
    };
4

2 回答 2

4

从 jquery.d.ts 文件(我的版本中的第 374 行):

interface JQuery {
   ...
   offset(): Object;
   offset(coordinates: any): JQuery;
   offset(func: (index: any, coords: any) => any): JQuery;
   ...
}

通过调用不带参数的函数,类型定义期望函数返回一个Object类型。我查看了 jQuery 的文档,你是对的,返回的对象应该有它topleft属性。

不幸的是,由于没有基于返回类型的重载,您将无法将另一个成员添加到JQuery接口上。因为,在这种特殊情况下,类型定义并不像应有的那样具体,我建议您简单地修改您的 jquery.d.ts 文件并更改返回类型,使其看起来如下(可能是字符串而不是数字?):

offset(): { top : number; left : number; };

如果您不想修改此文件,您还可以选择any在访问其上的任何属性之前将结果转换为,例如:

$('html, body').animate({ scrollTop: (<any> $($(this).attr('href')).offset()).top });

缺点是每次调用不带参数的函数时都需要强制转换。

于 2012-10-31T07:06:32.007 回答
0

而不是这个

 $('html, body').animate({ scrollTop: $($(this).attr('href')).offset().top });

尝试这个

 $('html, body').animate({ scrollTop: $(this).offset().top });
于 2012-10-31T08:33:00.003 回答