TypeScript:如何在0.8.0.0之后的版本中将null传递给重载函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TypeScript:如何在0.8.0.0之后的版本中将null传递给重载函数?相关的知识,希望对你有一定的参考价值。
今天将TypeScript从0.8.0.0更新到0.8.1.1。 TS编译器现在抱怨将null
或undefined
传递给重载的函数/方法。
例如,谷歌地图Marker
类有一个setMap
方法,有2个重载。这取自google maps definition file in the Definitely Typed project:
declare module google.maps {
...
export class Marker extends MVCObject {
...
setMap(map: Map): void;
setMap(map: StreetViewPanorama): void;
...
}
...
}
According to the 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
的引用。这显然是不正确的语法,因为编译器抱怨它期望;
所在的)
。
someMarker.setMap(null: google.maps.Map);
这是我现在的修复,似乎有效。这是解决这个问题的正确方法吗?
var nullMap: google.maps.Map = null;
someMarker.setMap(nullMap);
我意识到另一个修复可能是修改谷歌地图TS定义文件,以允许setMap(map: any): void;
超载,但这似乎是一个糟糕的解决方案。目前或未来的TS版本中是否有其他方法可以解决这个问题?
你正在解决它的方式现在有效,但比必要的更冗长。
您可以指定null
的类型为google.maps.Map
,并将其表示为someMarker.setMap(<google.maps.Map>null);
。
someMarker.setMap(<google.maps.Map>null);
我试过了
Type 'null' cannot be converted to type 'Map'.
如建议,但它没有奏效。我得到了这个编译错误:interface GenericMapShimType {
setMap(map: google.maps.Map | null): void;
}
(someMarker as SetMapShimType).setMap(null);
这是对我有用的方式:
qazxswpoi
以上是关于TypeScript:如何在0.8.0.0之后的版本中将null传递给重载函数?的主要内容,如果未能解决你的问题,请参考以下文章