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编译器现在抱怨将nullundefined传递给重载的函数/方法。

例如,谷歌地图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传递给重载函数?的主要内容,如果未能解决你的问题,请参考以下文章

用maven命令行编译项目时,如何指定JDK的版

linux下nodejs安装以及如何更新到最新的版

如何更新 NSMutableDictionary 中的 NSMutableArray 值

为啥这个意想不到的作曲家版本结果?

Bucketize 实值张量

在typescript项目中引入如何js依赖