5

MapOptions に型を強制するために、 https://github.com/borisyankov/DefinitelyTyped/tree/master/googlemapsから googlemaps の入力を取得しようとしています。したがって、次の悪いコードが与えられます。

/// <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 タイプが zoom 属性に正しくないというフラグを立てることを望んでいました。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): '{ zoom: string; を変換できません。}' から 'google.maps.MapOptions': タイプ '{ zoom: string; のプロパティ 'zoom' のタイプ。}' と 'MapOptions' は互換性がありません

エラーはコンパイラから発生しますが、WebEssentials によってどの程度の表面化が達成されているかはわかりません。

于 2013-06-20T07:01:14.043 に答える