TypeScript:如何在0.8.0.0之后的版本中将null传递给重载函数?

dan*_*wig 3 null arguments overloading typescript

今天将TypeScript从0.8.0.0更新到0.8.1.1.TS编译器现在抱怨传递nullundefined重载的函数/方法.

例如,google maps Marker类有一个setMap包含2个重载的方法.这是从绝对类型项目中谷歌地图定义文件中获取的:

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

根据google maps API v3文档,要从地图中删除标记,您应将其地图设置为null.我以前使用TS 0.8.0.0并且它工作正常:

var someMarker: google.maps.Marker = (code to initialize marker);
...
someMarker.setMap(null);
Run Code Online (Sandbox Code Playgroud)

TypeScript 0.8.1.1通过以下消息抱怨:

模糊的调用表达式 - 无法选择重载.

我试过的一个不起作用的修正是试图强迫TS相信null是对a的引用google.maps.Map.这显然是不正确的语法,因为编译器抱怨它期望它在;哪里).

someMarker.setMap(null: google.maps.Map);
Run Code Online (Sandbox Code Playgroud)

这是我现在的修复,似乎有效.这是解决这个问题的正确方法吗?

var nullMap: google.maps.Map = null;
someMarker.setMap(nullMap);
Run Code Online (Sandbox Code Playgroud)

我意识到另一个修复可能是修改谷歌地图TS定义文件以允许超载setMap(map: any): void;,但这似乎是一个糟糕的解决方案.目前或未来的TS版本中是否有其他方法可以解决这个问题?

Pet*_*son 5

你正在解决它的方式现在有效,但比必要的更冗长.

您可以通过强制转换它来指定您null的类型google.maps.Map.

someMarker.setMap(<google.maps.Map>null);
Run Code Online (Sandbox Code Playgroud)