0

Ich möchte den Prototyp einer externen Bibliothek in Typescript (1.8) erweitern. Die externe Bibliothek in meinem Fall ist google.maps, für die ich die Typescript-Definition-Datei von NuGet aufgenommen habe. Jetzt möchte ich durch das Hinzufügen einer Abstandsfunktion wie so in einer Datei „extensions.ts“ den Prototyp des google.maps.LatLng verlängern:Erweitern eines Prototyps aus einer externen Bibliothek in Typescript

/// <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); 
} 

Dann möchte ich es benutzen:

import "./extensions.ts" 

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

console.log(p1.distanceTo(p2)) 

Allerdings funktioniert dieser Code nicht mit vielen Fehlern:/ Was ist der richtige Weg, das zu lösen? Das Erweitern der globalen Deklarationen wie Array oder String funktioniert wie erwähnt here.

Hinweis: Für die resultierende Datei zu arbeiten, müssen Sie auch die Google enthalten Javascript-Bibliothek Karten:

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

Antwort

1

Sie sind fast da, es ist nur, dass Sie nicht über eine Schnittstelle zusammen mit seinem Namensraum definieren .
Sollte sein:

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

Es kompiliert, aber ich habe laufen nicht so habe ich nicht für Runtime-Probleme überprüft.

Auch wenn Sie importieren tun es ohne die .ts Erweiterung:

import "./extensions" 
+0

ich die Laufzeit-Test gemacht und es funktioniert. Danke vielmals :) – Crine

Verwandte Themen