2016-10-15 10 views
1

からクラスやインターフェイスを使用するにはどうすればよい私は、このファイルに名前空間google.mapsで定義されたクラスを拡張したい:タイプ/ Googleマップ/ index.d.ts @活字体:私は名前空間

class MyMarker extends google.maps.Marker { 
    constructor(options: google.maps.MarkerOptions){ 
    super(options); 
    } 
} 

このトランシルには誤差がありません。しかし、実行時には、google.mapsグローバルがまだ定義されていないので、コンストラクターでエラーが発生します。

私は間違っていますか?

+0

私はGoogleマップモジュールを追加しましたか? –

答えて

1
あなたが最初にそれをインポートする必要が

、例えば

import Marker from 'googlemaps'; 

class MyMarker extends Marker 
+0

私はそれを試みましたが、TSは私に「.../@ types/googlemaps/index.d.tsはモジュールではありません」というエラーを表示します。これは名前空間であり、実際のgooglemapsのlibは動的に読み込まれます – michael

0

ところで、私のフォールバックではなくclassinterfaceを使用して、TS型キャスト体操の束を行うことです。それは動作しますが、それは最適ではありません...

// new google.maps.Marker for MarkerClusterer 
export interface UuidMarker extends Marker { 
    uuid: string; 
} 

/** 
* Hack: "extend" google.maps.Marker to include uuid property 
* guard with this.ready.then() to ensure google.maps is loaded 
*/ 
function UuidMarkerFactory(uuid: string, options?: MarkerOptions) : Promise<UuidMarker> { 
    return this.ready.then(()=>{ 
    let gmOptions = options as any as google.maps.MarkerOptions; 
    const marker = new google.maps.Marker(gmOptions); 
    marker['uuid'] = uuid; 
    return marker as any as UuidMarker; 
    }) 
}