0

以下代码段创建了一个不明确的调用表达式错误:

/// <reference path="typings/google.maps.d.ts" />
class GoogleMap {
    private geocoder;
    private latlng;

    constructor() {
        this.geocoder = new google.maps.Geocoder();
        this.latlng = new google.maps.LatLng(51.165691, 10.451526000000058);
    }
    private setElements(): void {
        this.geocoder.geocode({ 'address': "Berlin", 'latLng': this.latlng }, (results) => {
            var infowindow = new google.maps.InfoWindow();
            infowindow.setContent(results[0].formatted_address); // 'Ambiguous call expression - could not choose overload'
        })
    }

setContent(...)有 2 个重载,即使类型formatted_address被正确解析为字符串,编译器也无法解析正确的类型。但是,当我显式设置方法参数的类型时它会起作用:

var content: string = results[0].formatted_address;
infowindow.setContent(content);

infoWindow还有一个奇怪的点:当我声明为类变量时,我认为这种解决方法不是必需 的。

对我来说,它看起来像一个错误,还是我错过了什么?

4

1 回答 1

1

据我所知,在 API 的 d.ts 文件中,geocode 的回调函数参数似乎缺少其类型定义,如果是这种情况,TypeScript 默认将其类型定义为“任何”以及该对象内部的任何内容也被定义为“any”类型。

因此,当您打电话时

infowindow.setContent(results[0].formatted_address);

TypeScript 正在寻找具有下一个签名的函数:

setContent(param1: any);

这在您的 d.ts 文件中没有定义,并且类型“any”可以是任何类型,这可能是您收到此错误的原因。

于 2013-01-23T16:06:48.913 回答