Typescript + Google Maps API + infobox.js Uncaught TypeError: InfoBox не является конструктором - PullRequest
0 голосов
/ 17 мая 2018

Создайте проект Vue.js + Typescript с помощью Google Maps API, попробуйте импортировать библиотеку infobox.js (пакет npm google-maps-infobox-window) и получить сообщение об ошибке в консоли:

Uncaught TypeError: InfoBox не является конструктором

Библиотека еще не набрана, поэтому все осталось - импортируйте как любой, без ввода.Я попробовал 3 способа сделать это:

  • import * as InfoBox 'google-maps-infobox-window'
  • var InfoBox = require ('google-maps-infobox-window')
  • создание * файла d.ts с ручным объявлением модуля / функции

И ни одно из этих действий не имеет никакого эффекта, конструктор InfoBox все еще не найден.Перед импортом infobox.js я уже импортировал googlemaps (через скрипт-тег) и RichMarker.js (через require ('')), и они отлично работают.Может кто-нибудь помочь с этим?

Кроме того, я попытался добавить "allowJs": true в tsconfig.json, все еще ничего

Код:

import { } from '@types/googlemaps';
const RichMarker = require('js-rich-marker');
//problems started below when I use
import { InfoBox } from 'google-maps-infobox-window';
// or this
const InfoBox = require('google-maps-infobox-window');

//...

//and try to use imported function (constructor)
let infoBox = new InfoBox({content: boxText});

1 Ответ

0 голосов
/ 19 мая 2018

В поисках решения проблемы я перепробовал множество возможных способов и всех пакетов npm, связанных с infobox.js. Наконец, я нашел 'google-maps-infobox' (https://www.npmjs.com/package/google-maps-infobox),, который не имеет исчерпывающего описания, но по крайней мере он работал. Более того, у него есть даже файл * .d.ts, который обеспечивает правильный импорт в ts -проект. Итак, я установил эту зависимость и добавил в раздел импорта компонента

import InfoBox from 'google-maps-infobox';

и используйте его таким образом

//in some method (function)
let infoBox: InfoBox = new InfoBox({
    content: //some html markup
});
infoBox.setPosition(mapObject.getPosition());
infoBox.open(this.map);

Кроме того, этот пакет хорошо работает с импортом require (), за исключением того, что InfoBox-объект будет напечатан как любой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...