Sono molto nuovo in JSDoc e sto provando Webstorm, quindi sono anche molto nuovo su webstorm.Avviso di implementazione dell'interfaccia Webstorm utilizzando JSDoc
devo da un lato un'interfaccia dichiarato in questo modo:
/** @interface */
function IInterface(){}
IInterface.prototype.myMethod = function(){};
Su un altro lato, sto sviluppando un modulo in cui io sono l'attuazione di questa interfaccia:
window.exports.MyImplementation = (function(){
"use strict";
/**
*
* @constructor
* @implements {IInterface}
*/
function MyImplementation(){}
MyImplementation.prototype.myMethod = function(){
// my implementation here
};
return MyImplementation;
})();
Il problema che ho è che l'implementazione non è apparentemente riconosciuta:
Ma se rimuovo window.exports.MyImplementati sulla assegnazione o la statment ritorno, non c'è più avvertimento ...
.. ma io voglio tornare e conservare il mio tipo dal mio modulo!
C'è qualcosa che mi manca o facendo male ...
Edit:?
Solo per portare un po 'più confusione al mio problema, mi stava prendendo in considerazione con un "pieno annotazione" dichiarazione di interfaccia (Se è possibile, sto sperimentando qui ...):
... ma in questo caso, si può notare che l ' "io "il simbolo è scomparso dal lato sinistro e se il metodo non è implementato, non ho alcun avvertimento. MA il tipo IInterface è riconosciuto.
Modifica: Penso di aver appena capito qualcosa mentre sperimentavo altre cose di jsDoc. L'avviso viene generato perché il controllo sull'implementazione viene eseguito su window.exports.MyImplementation. Ma non esiste un'assegnazione diretta che implementa questo oggetto nel codice. Ed è per questo che l'avviso è disabilitato quando rimuovo l'istruzione return o l'assegnazione "exports.MyImplementation".
.. quindi, non è sicuro che questo possa essere considerato un bug, questo potrebbe essere il pattern che ho usato per il mio modulo che non corrisponde allo schema previsto da WebStorm e forse anche dallo stesso JSdoc .... .. Se qualcuno che ha esperienza in JSDoc e WebStorm potuto confermare .....
Un'altra modifica: (significativo passo qui nella comprensione JSDoc credo)
le annotazioni sono stati spostati sul campo mirato e ... tadaaa (notare l'io che è ancora qui indicando che l'interfaccia sta effettivamente implementando).
La mia spiegazione: Ci potrebbe essere una logica dietro quella .... ma onestamente io davvero non so se è rilevante: come il campo documentato verrà esportato in "esportazioni.MyImplementation "alla fine, e questo è evidente l'annotazione è più utile qui che nel recinto privato. WebStorm ha rilevato l'esportazione in" exports.MyImplementation ", quindi attende la documentazione su di esso ...
ha senso? ...
e un'altra modifica (di nuovo) Investigation, indagini.
ho trovato una soluzione del tutto diversa che permette la documentazione, il completamento, la convalida e senza preavviso, che sembra una soluzione migliore per l'esportazione dei moduli:
Credo perché la vostra dichiarazione di 'MyImplementation' è tecnicamente "finita" in linea 66 senza l'implementazione di tutte le funzioni necessarie dell'interfaccia. Suppongo che devi integrare l'implementazione del metodo nella dichiarazione di 'MyImplementation', non aggiungerla al prototipo in seguito. – kasoban
Grazie per il tuo suggerimento kasoban, ma l'implementazione nel corpo non cambia nulla. Inoltre, voglio davvero implementarlo usando la prototipazione. Idealmente, se esistesse una soluzione che modificasse le annotazioni, si adatterebbe perfettamente a quanto necessario :-) –
Hmm, per quanto comprendo la documentazione il tuo codice dovrebbe andare bene, a parte il punto e virgola mancante alla fine della riga 66 e della riga 55. Forse questo confonde l'ispettore in qualche modo? – kasoban