Нічого не зміниться з точки зору того, як оголошуються прив'язки нокауту в розмітці, однак ми отримаємо інтелігенційну користь, як тільки інтерфейси будуть записані для номінальної бібліотеки. У цьому відношенні він би працював так само, як і зразок jquery , який має файл машинопису, що містить інтерфейси для більшості api jQuery .
Я думаю, якщо ви позбудетеся двох оголошень змінної для ko і $, ваш код спрацює. Вони приховують фактичні змінні ko та $, які були створені під час завантаження скриптів нокауту та jquery.
Мені довелося це зробити, щоб передати проект шаблону візуальної студії до нокауту:
app.ts:
class GreeterViewModel {
timerToken: number;
utcTime: any;
constructor (ko: any) {
this.utcTime = ko.observable(new Date().toUTCString());
this.start();
}
start() {
this.timerToken = setInterval(() => this.utcTime(new Date().toUTCString()), 500);
}
}
window.onload = () => {
// get a ref to the ko global
var w: any;
w = window;
var myKO: any;
myKO = w.ko;
var el = document.getElementById('content');
myKO.applyBindings(new GreeterViewModel(myKO), el);
};
default.htm:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>TypeScript HTML App</title>
<link rel="stylesheet" href="app.css" type="text/css" />
<script src="Scripts/knockout-2.1.0.debug.js" type="text/javascript"></script>
<script src="app.js"></script>
</head>
<body>
<h1>TypeScript HTML App</h1>
<div id="content" data-bind="text: utcTime" />
</body>
</html>