2013-06-20 14 views
5

Sto provando a ottenere la googlemap digitando da https://github.com/borisyankov/DefinitelyTyped/tree/master/googlemaps per imporre tipi su MapOptions. Quindi, dato il seguente codice cattivo:Typescript, google.maps.d.ts e tipo enforcement

/// <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); 

Speravo il tipo MapOptions da google.maps.d.ts avrebbe bandiera lo zoom attributo come non corretta. Perché lo tsc non è contrassegnato come un errore di tipo?

Aggiornamento: ha provato la seguente versione per includere più includere più informazioni sul tipo per il compilatore da masticare, ma ancora niente da fare:

/// <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); 
} 

risposta

4

Non hai digitato la variabile mapOptions, e non c'è modo per il compilatore dedurlo.

Prova var mapOptions:google.maps.MapOptions = { (ecc.).

La definizione dell'interfaccia di zoom?:number ha un bell'aspetto nei d.ts di riferimento.

inferenza di tipo potrebbe funzionare se è stato creato le opzioni come parte della chiamata mappa del costruttore:

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

... perché qui il compilatore conosce la firma del costruttore e può dedurre il tipo. Nel tuo esempio, mapOptions è solo un oggetto non tipizzato.

UPDATE In VS2012, con WebEssentials 2012 2,7, e TS 0.8.3.1, ottengo il seguente: enter image description here

... e al passaggio del mouse o nel pannello Output WebEssentials l'uscita di errore da TSC is:

Errore di compilazione. Vedere l'elenco degli errori per i dettagli D: /PROJECT/App/viewmodels/hops/map.ts (147,49): impossibile convertire '{zoom: stringa; } 'a' google.maps.MapOptions ': Tipi di proprietà' zoom 'dei tipi ' {zoom: string; } 'e' MapOptions 'sono incompatibili

L'errore viene dal compilatore, ma non so quanta parte della superficie venga raggiunta da WebEssentials.

+0

Ho provato entrambe le varianti e nessuno dei due sta causando a tsc il lancio di un avviso/errore di tipo. C'è una bandiera che devo lanciare per ottenere 'tsc' per essere più loquace? – Brett

+0

Che strumento stai usando? Vedi l'aggiornamento per quello che ricevo in VS. A volte gli strumenti non funzionano (è alfa, dopotutto) - e devi compilare per ottenere l'errore. – JcFx

+0

Sto usando il 'tsc' [tool.in] open source (http://www.typescriptlang.org/#Download). Spero che il tipo che controlla la metà di TypeScript sia limitato al solo plugin VisualStudio. – Brett