Я использую библиотеку LeafletJS в приложении Angular 2. Сама библиотека работает нормально, так как я включил определение типа (leaflet.d.ts) и, конечно же, модуль узла листовки.
Я пытаюсь импортировать плагин для библиотеки листовок под названием "leaflet-canvasicon" и там для него нет доступного определения типа, и поскольку он написан на ES5, всякий раз, когда я пытаюсь его включить, компилятор удовлетворен, но я получаю следующую ошибку на консоли:
leaflet-src.js:314
Uncaught TypeError: this.callInitHooks is not a function
at Object.NewClass (http://localhost:2080/main.bundle.js:58716:8)
at http://localhost:2080/main.bundle.js:77650:180
at Object.<anonymous> (http://localhost:2080/main.bundle.js:77652:3)
at __webpack_require__ (http://localhost:2080/inline.js:53:30)
at Object.<anonymous> (http://localhost:2080/main.bundle.js:54476:18)
at __webpack_require__ (http://localhost:2080/inline.js:53:30)
at Object.<anonymous> (http://localhost:2080/main.bundle.js:54411:90)
at __webpack_require__ (http://localhost:2080/inline.js:53:30)
at Object.<anonymous> (http://localhost:2080/main.bundle.js:54600:70)
at __webpack_require__ (http://localhost:2080/inline.js:53:30)
Я думал о многих решениях:
Создайте новое определение типа для плагина (
leaflet-canvasicon.d.ts
) и используйте функцию слияния объявлений пространств имен в Typescript, чтобы по-прежнему использовать плагин какL.CanvasIcon
.Перепишите плагин, используя машинописный текст, расширив существующие интерфейсы в
namespace L
.Прекратите использовать типизированную «листовку» и просто импортируйте модуль узла, написанный на ES5, затем добавьте объявление L в файл
typings.d.ts
angular:declare var L: any;
Но каждый раз я сталкиваюсь с проблемами компилятора. Я думаю, что я делаю это неправильно. Как я могу включить плагин, чтобы компилятор был удовлетворен и мог использовать его как L.CanvasIcon
Вот package.json
файл:
"dependencies": {
"@angular/common": "2.1.2",
"@angular/compiler": "2.1.2",
"@angular/compiler-cli": "2.1.2",
"@angular/core": "2.1.2",
"@angular/forms": "2.1.2",
"@angular/http": "2.1.2",
"@angular/platform-browser": "2.1.2",
"@angular/platform-browser-dynamic": "2.1.2",
"@angular/platform-server": "2.1.2",
"@angular/router": "3.1.2",
"@types/leaflet": "^1.0.36",
"core-js": "^2.4.1",
"leaflet": "^1.0.1",
"leaflet-canvasicon": "^0.1.6",
"leafletjs-canvas-overlay": "^1.0.1",
"rxjs": "5.0.0-rc.1",
"ts-helpers": "^1.1.2",
"zone.js": "^0.6.26"
},
"devDependencies": {
"angular-cli": "1.0.0-beta.19-3",
"ts-node": "1.6.1",
"tslint": "3.15.1",
"typescript": "2.0.6",
"typings": "^1.5.0"
}
}