使用TypeScript的jQuery计时器

时间:2015-03-23 20:36:00

标签: jquery typescript typescript1.4

我是TypeScript的新手,对初学者问题感到抱歉。

我正在尝试在TypeScript中创建一个新的JQueryTimer,并在按键后启动它。我正在使用DefinitelyTyped jQuery和jQuery.timer定义。

我的app.ts:

/// < reference path='references.ts'/>
module app {
   function addKeyToString(e) {
        $("body").timer(
            function () {
                console.log("This function just got called");
            }, 10000, true
            );
        document.getElementById("typingSpan").innerText += e.char;
    }    
    document.onkeypress = addKeyToString;
}

我的index.html看起来像这样:

<!DOCTYPE html>

<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>TypeScript HTML App</title>


    <script src="lib/jquery/jquery.js"></script>
    <script src="lib/jquery/jquery-ui.min.js"></script> 
    <script type="text/javascript" src="app.js"></script>
    <script src="lib/jquery/jquery.timer.js"></script>

    <link rel="stylesheet" href="app.css" type="text/css" />

</head>
<body>
    <h1>TypeScript HTML App</h1>
    WriteHere: <span id="typingSpan"></span>
</body>

</html>

当我试图启动它并按一个键时,我收到运行时错误(在我的函数的第一行),其中说:

  

对象不支持属性或方法'timer'

有人能告诉我问题的解决方案是什么?我检查了DefinitelyTyped示例,并根据它应该工作。这是链接:Link

2 个答案:

答案 0 :(得分:1)

您应该参考图书馆的文档https://github.com/jchavannes/jquery-timer

这给出了示例用法:

var timer = $.timer(function() {
    alert('This message was sent by a timer.');
});

对d.ts文件的测试不一定是正确的,不应该用作参考文档。我不知道为什么这个似乎是错的。

答案 1 :(得分:0)

我猜测TypeScript测试(不是由库作者编写)可能在它创建时(2013年)起作用,同时对TypeScript进行了重大更改。 (这是我纯粹的猜测,但整个TypeScript / ECMAScript故事现在处于不断变化的状态。)

有时最简单的&amp;大多数面向未来的事情是让JavaScript成为JavaScript,并将代码抱在JavaScript包装函数中。在.js文件内或<script>标记内,执行之类的操作

function createTimer() {
    var timer = $.timer(function () {
        timerCallback();
    });
    timer.set({ time: 1000, autostart: false });
    return timer;
}

在.ts文件中声明var timerfunction timerCallback() { }。这将允许您在TypeScript中使用计时器对象,尽管它不会有智能感知。

要初始化它,请执行之类的操作

$(document).ready(function () {
    timer = createTimer();
    $(".start").click(function () {
        timer.play();
    });
});