0

Я хотел бы расширить прототип внешней библиотеки в TypScript (1.8). Внешняя библиотека в моем случае - google.maps, для которой я включил файл определения описаний от NuGet. Теперь я хочу, чтобы расширить прототип google.maps.LatLng, добавив функцию расстояния как и в файле «extensions.ts»:Расширение прототипа из внешней библиотеки в Typcript

/// <reference path="./google.maps.d.ts" /> 
export {} 

declare global { 
    interface google.maps.LatLng { 
     distanceTo(google.maps.LatLng): number; 
    } 
} 

google.maps.LatLng.prototype.distanceTo = function(other) { 
    return google.maps.geometry.spherical.computeDistanceBetween(this, other); 
} 

Тогда я хочу, чтобы использовать его:

import "./extensions.ts" 

let p1 = new google.maps.LatLng(5, 5); 
let p2 = new google.maps.LatLng(10, 10); 

console.log(p1.distanceTo(p2)) 

Однако этот код не работает со многими ошибками:/ Каков правильный способ его решения? Расширение глобальных объявлений, таких как Array или String, работает так, как указано here.

Примечание: полученный файл на работу вы должны также включать в себя Google Maps библиотеки JavaScript:

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=geometry&key=[your-key-here]&sensor=FALSE"></script> 

ответ

1

Ты почти там, это просто, что вы не можете определить интерфейс вместе с пространством имен ,
Должно быть:

declare global { 
    module google.maps { 
     interface LatLng { 
      distanceTo(other: LatLng): number; 
     } 
    } 
} 

собирает, но я не запустить его, так что я не проверил проблем во время выполнения.

Кроме того, при импорте сделать это без расширения .ts:

import "./extensions" 
+0

Я сделал тест во время выполнения, и она работает. Большое спасибо :) – Crine

Смежные вопросы