3

本日、TypeScript を 0.8.0.0 から 0.8.1.1 に更新しました。TS コンパイラは、オーバーロードされた関数/メソッドへのパスnullまたはパスについて不平を言うようになりました。undefined

たとえば、Google マップMarkerクラスにはsetMap2 つのオーバーロードを持つメソッドがあります。これは、間違いなく型付けされたプロジェクトの Google マップ定義ファイルから取得されます。

declare module google.maps {
    ...
    export class Marker extends MVCObject {
        ...
        setMap(map: Map): void;
        setMap(map: StreetViewPanorama): void;
        ...
    }
    ...
}

google maps API v3 docsによると、地図からマーカーを削除するには、その地図を null に設定する必要があります。私は以前にTS 0.8.0.0でこれを持っていましたが、うまくいきました:

var someMarker: google.maps.Marker = (code to initialize marker);
...
someMarker.setMap(null);

TypeScript 0.8.1.1 は、これについて次のメッセージで文句を言います。

あいまいな呼び出し式 - オーバーロードを選択できませんでした。

私が試したものの、うまくいかなかった修正の 1 つはnull、 TS にgoogle.maps.Map. これは明らかに間違った構文;です)

someMarker.setMap(null: google.maps.Map);

これが私が今持っている修正で、うまくいくようです。これは、この問題を回避する正しい方法ですか?

var nullMap: google.maps.Map = null;
someMarker.setMap(nullMap);

Google マップの TS 定義ファイルを変更して のオーバーロードを許可する別の修正方法があることは認識していますがsetMap(map: any): void;、それは悪い解決策のようです。これを回避するために、現在、または将来の TS ビルドで計画されている他の方法はありますか?

4

2 に答える 2

5

現在、この問題を回避する方法は機能していますが、必要以上に冗長です。

そのようにキャストするnullことで、そのタイプであることを指定できます。google.maps.Map

someMarker.setMap(<google.maps.Map>null);
于 2013-01-08T19:43:06.080 に答える