TypeScript — это типизированное расширение JavaScript, которое компилируется в обычный JavaScript. Приведённый ниже фрагмент кода демонстрирует простое использование Google Maps с помощью TypeScript.
let map: google.maps.Map;
const center: google.maps.LatLngLiteral = {lat: 30, lng: -110};
function initMap(): void {
map = new google.maps.Map(document.getElementById("map") as HTMLElement, {
center,
zoom: 8
});
}
Начиная
Проект DefinitelyTyped — это проект с открытым исходным кодом, который поддерживает файлы объявления типов для многих пакетов, включая Google Maps. Файлы объявления типов JavaScript для Google Maps (см. исходные файлы на GitHub) можно установить с помощью NPM из пакета @types/google.maps .
npm i -D @types/google.maps
Альфа- и бета-функции
Как правило, эти типы не обладают свойствами, функциями или классами, которые присутствуют в альфа- или бета-версиях. Во многих из этих случаев объект можно привести к нужному типу.
Следующая ошибка вызвана свойством mapId beta для MapOptions .
error TS2345: Argument of type '{ center: google.maps.LatLng; zoom: number;
mapId: string; }' is not assignable to parameter of type 'MapOptions'. Object
literal may only specify known properties, and 'mapId' does not exist in type
'MapOptions'.
Указанную выше ошибку можно исправить с помощью приведенного ниже преобразования типов.
{ center: {lat: 30, lng: -110}, zoom: 8, mapId: '1234' } as google.maps.MapOptions
Конфликтующие пакеты @types
Некоторые библиотеки могут использовать пакет, отличный от @types/google.maps , что может вызвать конфликты. Используйте параметр компилятора skipLibCheck , чтобы избежать проблем с несогласованными типами.
{
"compilerOptions": {
"skipLibCheck": true
}
}
Укажите typeRoots
Для некоторых фреймворков, таких как Angular, может потребоваться указать параметр компилятора typeRoots , чтобы включить типы, установленные из @types/google.maps и всех других пакетов "@types".
{
...
"compilerOptions": {
...
"typeRoots": [
"node_modules/@types",
],
...
}
}