2015-03-23 3 views
1

Я новичок в TypeScript, так что извините за вопрос начинающего.jQuery таймер с использованием TypeScript

Я пытаюсь создать новый JQueryTimer в TypeScript и запустить его после нажатия клавиши. Я использую определения 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> 

Когда я пытаюсь начать это и нажмите клавишу я получаю сообщение об ошибке выполнения (в первая линия моей функции), которая говорит:

Объект не поддерживает свойство или метод «таймер»

Может ли кто-нибудь сказать мне, что является решением моей проблемы? Я проверил пример DefinitelyTyped и на основании этого должен работать. Вот ссылка: Link

ответ

1

Вы должны обратиться к документации для библиотеки, https://github.com/jchavannes/jquery-timer

Это дает пример использования:

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

тесты для d.ts файлы не обязательно собираются быть правильно и не должны использоваться в качестве справочных документов. Я не знаю, почему это кажется неправильным.

+0

В этом случае компилятор говорит свойство «Таймер» не существует на типе «JQueryStatic». Если я добавлю таймер: часть JQueryTimer из определения интерфейса JQuery jquery.timer.d.ts (а также удалить оттуда) к определению интерфейса JQueryStatic в jquery.d.ts, он решает проблему. Я не знаю, является ли это правильным способом использования этого таймера или только обходным путем. – bucicimaci

0

Я бы предположил, что тест TypeScript (не написанный автором библиотеки), вероятно, работал в то время, когда он был создан (в 2013 году), и в то же время были внесены изменения в TypeScript. (Это чисто спекуляция с моей стороны, но вся история TypeScript/ECMAScript сейчас находится в состоянии изменения.)

Иногда самый простой & самый надежный объект, который нужно сделать, это просто позволить JavaScript быть JavaScript и поставить код, который жалуется в функции обертки JavaScript. Внутри .js файла или в пределах <script> тега, сделать что-то вроде это

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

Объявите var timer и function timerCallback() { } в файле .ts. Это позволит использовать объект таймера в TypeScript, хотя у него не будет Intellisense.

Чтобы инициализировать его, сделать что-то вроде этого:

$(document).ready(function() { 
    timer = createTimer(); 
    $(".start").click(function() { 
     timer.play(); 
    }); 
}); 
Смежные вопросы