TypeScript希望您使用ES6导入语句,即:
import * as jQuery from 'jquery';
另一种方法是在模块加载器中引用脚本(例如jquery),然后使用
declare const jQuery: any
在整个应用程序中使用。另一种方法是引用tsconfig中的键入:
使用导入语句的第一种方法:
import * as jQuery from 'jquery'; // jquery installed via npm install jquery
import * as jsrender from 'jsrender'; // jsrender installed via npm install jsrender
// === OR ===
declare const jQuery: any; // Reference the script in your module loader/html
declare const jsrender: any; // Reference the script in your module loader/html
class UnchartedGame {
constructor() {
}
/***** Error on the $.observe() line !! *****/
loadMap() {
this.linkTemplate("options", "#optionsTmpl", this).done(function (currentGame) {
$.observe(currentGame, "*", currentGame.modelChangeHandler);
});
}
modelChangeHandler(ev, eventArgs) {
if (ev.type == "propertyChange") {
var _game: UnchartedGame = ev.currentTarget;
if (eventArgs.path == "mapType") {
try {
_game.myMap.setMapType(mapTypeNames[newValue]);
}
catch (ex) {
}
}
}
}
loadTemplate(tmplName: string) {
var deferredLoad = $.Deferred();
try {
var filePath: string = "../tmpl/" + tmplName + ".tmpl.html";
$.get(filePath).then(function (templateText) {
$.templates(tmplName, templateText);
deferredLoad.resolve();
})
}
catch (e) {
deferredLoad.reject();
}
return deferredLoad.promise();
}
linkTemplate(tmplName: string, targetId: string, model: UnchartedGame) {
var deferredLink = $.Deferred();
try {
this.loadTemplate(tmplName).done(
function () {
$.templates[tmplName].link(targetId, model);
deferredLink.resolve(model);
});
}
catch (e) {
deferredLink.reject();
}
return deferredLink.promise();
}
{
"compilerOptions": {
"types": ["jquery", "jsrender"]
}
}
另一种可能的方法是转到主模块并使用以下行:
import 'jquery'; // jquery installed via npm install jquery
我注意到这就是我在我的一个项目中使用它的方式(必需的@types文件)。
我还建议不要使用引用路径,因为TypeScript都是关于类型的。大多数模块(从我目前看到的情况来看)都带有一个打字文件。然而,以jQuery为例,情况并非如此。那么,在你这么做之后
npm install jquery
npm install @types/jquery --save-dev