#javascript #typescript
#javascript #машинописный текст
Вопрос:
Я хочу расширить класс, определенный в пространстве google.maps
имен в этом файле:
@types/googlemaps/index.d.ts
class MyMarker extends google.maps.Marker {
constructor(options: google.maps.MarkerOptions){
super(options);
}
}
Это происходит без ошибок. Но во время выполнения я получаю сообщение об ошибке в конструкторе, потому google.maps
что глобальный все еще не определен.
Что я делаю не так?
Комментарии:
1. вы уверены, что добавили модуль Google map?
Ответ №1:
Сначала вам нужно импортировать его, например
import Marker from 'googlemaps';
class MyMarker extends Marker
Комментарии:
1. Я пробовал это, но TS выдает мне ошибку,
.../@types/googlemaps/index.d.ts is not a module
. Это пространство имен, и фактическая библиотека googlemaps загружается динамически
Ответ №2:
Кстати, мой запасной вариант — использовать interface
вместо class
и выполнить кучу типовых упражнений TS. Это работает, но не оптимально…
// new google.maps.Marker for MarkerClusterer
export interface UuidMarker extends Marker {
uuid: string;
}
/**
* Hack: "extend" google.maps.Marker to include uuid property
* guard with this.ready.then() to ensure google.maps is loaded
*/
function UuidMarkerFactory(uuid: string, options?: MarkerOptions) : Promise<UuidMarker> {
return this.ready.then( ()=>{
let gmOptions = options as any as google.maps.MarkerOptions;
const marker = new google.maps.Marker( gmOptions );
marker['uuid'] = uuid;
return marker as any as UuidMarker;
})
}