今天将 TypeScript 从 0.8.0.0 更新到 0.8.1.1。TS 编译器现在抱怨传递null
或传递undefined
给重载的函数/方法。
例如,谷歌地图Marker
类有一个setMap
有 2 个重载的方法。这是从绝对类型项目中的谷歌地图定义文件中获取的:
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 通过以下消息抱怨这一点:
不明确的调用表达式 - 无法选择重载。
我尝试过的一个无效的修复方法是试图强迫 TS 相信null
是对google.maps.Map
. 这显然是不正确的语法,因为编译器抱怨它需要一个;
where the )
is。
someMarker.setMap(null: google.maps.Map);
这是我现在拥有的修复程序,它似乎有效。这是解决此问题的正确方法吗?
var nullMap: google.maps.Map = null;
someMarker.setMap(nullMap);
我意识到另一个解决方法可能是修改 google maps TS 定义文件以允许重载setMap(map: any): void;
,但这似乎是一个糟糕的解决方案。目前是否有任何其他方式或计划在未来的 TS 版本中解决此问题?