jQuery 计时器与 TypeScript 一起使用

jQuery timer using with TypeScript

我是 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>

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

Object doesn't support property or method 'timer'

有人能告诉我解决我的问题的方法是什么吗?我检查了 DefinitelyTyped 示例,并基于它应该可以工作。这是link:Link

您应该参考库的文档,https://github.com/jchavannes/jquery-timer

这给出了示例用法:

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

d.ts 文件的测试不一定正确,不应用作参考文档。我不知道为什么这个看起来是错误的。

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

有时最简单和最面向未来的事情就是让 JavaScript 成为 JavaScript,然后将抱怨的代码放在 JavaScript 包装函数中。在 .js 文件或 <script> 标记内,做一些 like this

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

在您的 .ts 文件中声明 var timerfunction timerCallback() { }。这将允许您在 TypeScript 中使用计时器对象,尽管它没有 Intellisense。

要初始化它,做一些这样的事情:

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