dan*_*wig 3 null arguments overloading typescript
今天将TypeScript从0.8.0.0更新到0.8.1.1.TS编译器现在抱怨传递null或undefined重载的函数/方法.
例如,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版本中是否有其他方法可以解决这个问题?
你正在解决它的方式现在有效,但比必要的更冗长.
您可以通过强制转换它来指定您null的类型google.maps.Map.
someMarker.setMap(<google.maps.Map>null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1419 次 |
| 最近记录: |