Sto cercando di ottenere che il compilatore di chiusura di Google non rinomini gli oggetti quando vengono passati come impostazioni o dati a una funzione. Osservando l'annotazioni presenti in jQuery, ho pensato che questo avrebbe funzionato:Impedisci al compilatore di chiusura di Google di rinominare gli oggetti delle impostazioni
/** @param {Object.<string,*>} data */
window.hello = function(data) {
alert(data.hello);
};
hello({ hello: "World" });
Tuttavia, finisce in questo modo:
window.a = function(b) {
alert(b.a)
};
hello({a:"World"});
La funzione ajax
trovato here ha questa annotazione e sembra funzionare . Quindi, perché non questo? Se i dati sono il valore di ritorno da una fonte esterna o da un oggetto impostazioni che vorrei poter dire al compilatore di non toccarlo, usare il trucco this["escape"]
è intrusivo per qualcosa di simile a mio parere.
Ecco un esempio migliore
function ajax(success) {
// do AJAX call
$.ajax({ success: success });
}
ajax(function(data) {
alert(data.Success);
});
uscita:
$.b({c:function(a){alert(a.a)}});
success
è stato rinominato in c
e Success
(con la S maiuscola) è stato rinominato a
.
ora compilo lo stesso codice con il jQuery 1.6 externs file e ottengo il seguente output:
$.ajax({success:function(a){alert(a.a)}});
produce anche un avvertimento che la proprietà Success
non è definita, come mi sarei aspettato, ma non può cambiare titolo Success
a semplicemente a
, che comunque romperà il mio codice. Osservo il presente di annotazione per lo ajax
e trovo questo tipo di espressione {Object.<string,*>=}
, annoto il mio codice di conseguenza e ricompilifico. Ancora non funziona ...
Per una migliore comprensione per chi legge questo in futuro: il JS collegato è un file extern. Viene semplicemente usato insieme al code-to-compile per impedire la ridenominazione di variabili, proprietà e funzioni/metodi "esternalizzati". Le annotazioni in esso indicano semplicemente l'uso corretto per i controlli del tipo in fase di compilazione. In nessun modo istruiscono il compilatore a non rinominare i metodi ei parametri di jQuery. – Kiruse