以下代码段会创建一个不明确的调用表达式错误:
/// <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
的类型正确解析为字符串,编译器也无法解析正确的类型。但是,当我将方法参数的类型设置为explicit时,它可以正常工作:
var content: string = results[0].formatted_address;
infowindow.setContent(content);
同样奇怪的是:当我将infoWindow
声明为类变量时,我认为这种解决方法不是必需的。
对我来说,它看起来像一个错误,或者我错过了什么?
答案 0 :(得分:1)
对于我所看到的,在你的API的d.ts文件中,geocode的回调函数参数似乎缺少它的类型定义,如果是这种情况,TypeScript默认将它的类型定义为“any”和任何东西内部此对象也定义为“any”类型。
因此,当你打电话时
infowindow.setContent(results[0].formatted_address);
TypeScript正在寻找具有下一个签名的函数:
setContent(param1: any);
你的d.ts文件中没有定义哪个类型,“any”类型可以是任何类型,这可能是你收到此错误的原因。