Создание экземпляра Google Map в классе typescript
Привет, я новичок в Typescript и Javascript, и у меня возникли проблемы с созданием экземпляра googlemap.
Я загрузил файл декларации google.maps.d.ts и импортировал его в класс Typescript, так что все intellisense отлично работает и т.д.;
import googleMaps = module("google.maps");
module Mapping {
export class GoogleMap implements IMap {
public name: string;
private map: any;
private options: any;
constructor (mapDiv:Element) {
this.name = "GoogleMap";
this.options = { zoom: 3, MapTypeId: 'terrian' };
this.map = new googleMaps.google.maps.Map(mapDiv, this.options);
}
}
}
Когда я пытаюсь создать этот класс в файле index.cshtml,
<!DOCTYPE html>
<html>
<head><title>TypeScript Mapping</title></head>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js? key=MYKEYGOESHERE&sensor=false"></script>
<script type="text/javascript" src="~/scripts/require.js"></script>
<script type="text/javascript" src="~/typings/Mapping.js"></script>
<script type="text/javascript">
function initialize() {
var mapCanvas = document.getElementById("map");
var googleMap = new Mapping.GoogleMap(mapCanvas);
}
</script>
<body onload="initialize()">
<div id="map" style="height: 512px; width: 512px;"></div>
Я получаю следующую ошибку:
Ошибка выполнения Microsoft JScript: имя модуля "google.maps" еще не загружено для контекста: _. Используйте require ([])
Что мне не хватает, чтобы загрузить googlemaps api?
Спасибо заранее.
Ответы
Ответ 1
Поскольку вы включаете Google Maps в качестве тега script
на своей странице, вы, вероятно, не хотите использовать загрузчик модуля для загрузки.
Итак, я бы заменил:
import googleMaps = module("google.maps");
С
/// <reference path="./google.maps.d.ts" />
Ссылка на TypeScript "Я убеждаюсь, что этот script доступен во время выполнения".
В заявлении import говорится: "Идите и загрузите этот script для меня во время выполнения".
Ответ 2
Мне понравилось создавать что-то, называемое функцией shim
, которая позволяет мне работать с переменными окна/объектами (например, google
). Я создал этот файл .ts
:
// -- Shim.ts:
/**
* Loads variable from window according to
* the name parameter.
*
* @export
* @param {string} name
* @returns {*} window[name]
*/
export function shim(name: string): any {
let global: any = window;
return global[name];
}
Моя основная настройка, чем выглядит:
- main.ts
-- shims
-- -- Shim.ts
-- -- Google.ts
-- -- Swiper.ts
-- -- ... .ts
и Google.ts, чем просто использовать эту функцию, например:
// -- Google.ts
import { shim } from '../shims/Shim';
/**
* Loads variable from window with the
* name 'google'
*
* @export
* @returns {*} window['google']
*/
export let google = shim('google');
и если вы хотите использовать переменную google, просто включите ее как:
import { google } from '../shims/Google';
Возможно, вы также можете посмотреть typings - Типизация - это простой способ управления и установки определения TypeScript - что помогло мне много.
В настоящее время я написал еще одну TypeScript программу Google Maps и подумал о том, чтобы поделиться ею с сообществом.
Вы можете проверить это, используя эту ссылку: https://github.com/DominikAngerer/typescript-google-maps