5

我正在尝试从https://github.com/borisyankov/DefinitelyTyped/tree/master/googlemaps输入 googlemaps以在 MapOptions 上强制执行类型。所以给出以下错误代码:

/// <reference path="google.maps.d.ts" />
var map;
function initialize() {
  var mapOptions = {
    zoom: "no, not really", 
    center: new google.maps.LatLng(-34.397, 150.644),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById('map-canvas'),
       mapOptions);
}

google.maps.event.addDomListener(window, 'load', initialize);

我希望 google.maps.d.ts 中的 MapOptions 类型会将缩放属性标记为不正确。为什么不tsc将此标记为类型错误?

更新:尝试了以下版本以包含更多包含更多类型信息以供编译器咀嚼,但仍然没有骰子:

/// <reference path="google.maps.d.ts" />
var map;
function initialize() {
  var mapOptions : google.maps.MapOptions = {
    zoom: "no, not really",
    center: new google.maps.LatLng(-34.397, 150.644),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById('map-canvas'),
       mapOptions);
}
4

1 回答 1

4

您还没有输入mapOptions变量,编译器无法推断它。

尝试var mapOptions:google.maps.MapOptions = {(等)。

的接口定义zoom?:number在您引用的 d.ts 中看起来不错。

如果您将选项创建为映射构造函数调用的一部分,则类型推断将起作用:

map = new google.maps.Map(document.getElementById('map-canvas'), {zoom: 'this-should-fail'});

...因为这里编译器知道构造函数的签名并且可以推断类型。在您的示例中,mapOptions只是一个无类型的对象。

更新 在 VS2012 中,使用 WebEssentials 2012 2.7 和 TS 0.8.3.1,我得到以下信息: 在此处输入图像描述

...在悬停或在 WebEssentials 输出面板中,TSC 的错误输出为:

编译错误。详见错误列表 D:/PROJECT/App/viewmodels/hops/map.ts(147,49): Cannot convert '{ zoom: string; }' 到 'google.maps.MapOptions':类型为 '{ zoom: string; 的属性 'zoom' 的类型 }' 和 'MapOptions' 不兼容

错误来自编译器,但我不知道 WebEssentials 实现了多少表面处理。

于 2013-06-20T07:01:14.043 回答