如何使用TypeScript/jQuery传递元素

Mar*_*cel 6 jquery typescript

我试图通过TypeScript/JQuery计算出DOM元素的位置和高度/宽度.在TypeScript之前我只是做了这样的事情:

        function ActOnClick(itemClicked, loadPath) {
            //sample code
            var v1 = itemClicked.offset();
            var v2 = itemClicked.width();
            var v3 = itemClicked.height();

        };

        $(document).ready(function () {

            $("#idCRM").click(function () {
                ActOnClick($("#idCRM"), "/Widgets/GetCRM");
            });
}
Run Code Online (Sandbox Code Playgroud)

其中idCRM是我的cshtml文档中的"部分"(但它可以是任何div等)

现在我试图将此代码移动到TypeScript中,但我在ActOnClick函数中期望从jQuery的$("#idCRM")进入什么类型?现在我选择'元素'但是a)它没有暴露宽度,高度等b)由$("#idCRM")引起的ActOnClick调用失败!

/// <reference path="../../ScriptsTS/jquery.d.ts" />
function ActOnClick(itemClicked: Element, loadPath: string) {

    var v1 = itemClicked.offset();  <-- FAILS
    var v2 = itemClicked.width();   <-- FAILS
    var v3 = itemClicked.height();  <-- FAILS

};

$(document).ready(function () {

    $("#idCRM").click(function () {
        ActOnClick($("#idCRM"), "/Widgets/GetCRM");  <-- FAILS
    });
}
Run Code Online (Sandbox Code Playgroud)

SWe*_*eko 16

如果您需要代码才能正常工作,您可以始终使用Anytypescript类型,例如:

function ActOnClick(itemClicked: Any, loadPath: string) {
  var v1 = itemClicked.offset();
  var v2 = itemClicked.width();
  var v3 = itemClicked.height();
};
Run Code Online (Sandbox Code Playgroud)

Typescript基本上关闭了一个Any变量,它不会发出任何错误或警告.但是,$("#idCRM")应该返回一个实现JQuery接口的对象,在其中定义jquery.d.ts,因此您应该实际使用:

function ActOnClick(itemClicked: JQuery, loadPath: string) {
  var v1 = itemClicked.offset();
  var v2 = itemClicked.width();
  var v3 = itemClicked.height();
};
Run Code Online (Sandbox Code Playgroud)

offset(),width()height()方法在该接口上定义的,并且它们返回Object,number并且number分别.