Я пытаюсь интегрировать/использовать jsview/jsrender в проекте typescript со сборкой, выполненной с использованием webpack-4. Поскольку пакет jsrender/jsviews, установленный через npm, не содержит определений типов, они не доступны через DefinitelyTyped, но авторы jsview/jsrender предоставили определения типов отдельно. Я сохранил их в папках typings/[jsrender, jsview] и изменил свой tsconfig.json, как показано ниже:
Мой tsconfig.json имеет следующее:
{
"compileOnSave": true,
"compilerOptions": {
"baseUrl": ".",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true,
"target": "es2015",
"moduleResolution": "node",
"declaration": false
},
"include": [
"static/js/**/*",
"*/static/ts/**/*.ts"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
],
"files": [
"./typings/jsrender/index.d.ts",
"./typings/jsviews/index.d.ts"
]
}
И я импортирую jsrender с помощью:
import * as jsrender from 'jsrender';
И когда я пытаюсь использовать jsrender с:
tmpl = jsrender($).templates('Name: {{:name}}');
Webpack жалуется на следующую ошибку:
TS2339: свойство «шаблоны» не существует для типа «JQuery».
Первые несколько строк определения типа для jsrender имеют следующее:
/// <reference types="jquery" />
declare module 'jsrender' {
export = jsrender;
}
declare const jsrender: JQueryStatic;
interface JQueryStatic {
/* var htmlString = $.render.templateName(data, myHelpersObject); // Render named template */
render: {
[tmplName: string]: JsViews.TemplateRender;
};
/* $.views.xxx ... // JsRender/JsViews APIs */
views: JsViews.Views;
/* $.templates(...) or $.templates.templateName: Compile/get template */
templates: JsViews.Templates;
}
Я не уверен, почему веб-пакет жалуется даже при отладке, если я просто делаю:
let tmpl = jsrender($);
и поставьте точку останова на строку выше, я вижу, что объект tmpl имеет доступную функцию «шаблоны».
Я не уверен, является ли это проблемой веб-пакета, проблемой tsconfig или тем, как я использую jsrender.