2014-11-13 6 views
5

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: Not implemented warning screen shot

Ma se rimuovo window.exports.MyImplementati sulla assegnazione o la statment ritorno, non c'è più avvertimento ...

enter image description here

.. 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 ...):

enter image description here

... 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).

enter image description here

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: enter image description here

+0

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

+0

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 :-) –

+0

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

risposta

1

si tratta di un bug nel supporto JSDoc WebStorm, vota per WEB-14202

+0

Ok, questa sembra essere la buona risposta in effetti: quando si tenta di eseguire l'implementazione dal modulo, ma senza il prefisso namespace, questo funziona anche se l'oggetto target è sbagliato ....... Grazie per l'aggiornamento bugtracker –

+0

Secondo le mie ulteriori indagini, sono sempre meno convinto che questo potrebbe essere un bug –

Problemi correlati