0

Typescript(1.8)で外部ライブラリのプロトタイプを拡張したいと思います。私の場合の外部ライブラリは、NuGetのTypescript Definitionファイルが含まれているgoogle.mapsです。今、私は、ファイルの「extensions.ts」のような距離関数を追加することにより、google.maps.LatLngのプロトタイプを拡張したい: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); 
} 

その後、私はそれを使用したい:

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を含む必要が動作するためには、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