2016-03-18 9 views
8

Sto cercando di ottenere this definizione Node.js dattiloscritto a lavorare, ma WebStorm mi dà una grande lista di errori, con tutti lo stesso messaggio riservato:dattiloscritto: parola 'questo' usato come nome

Reserved word 'this' used as name. This inspection reports on any uses of JavaScript reserved words being used as a name. The JavaScript specification reserves a number of words which are currently not used as JavaScript keywords. Using those words as identifiers may result in broken code if later versions of JavaScript use them as keywords.

un esempio pezzo di codice in cui questo errore si verifica a causa del tipo di ritorno:

Error example

Perché non è possibile la parola this essere un tipo? Sto forse usando un vecchio compilatore TypeScript o è un errore nella digitazione?


Edit: per sbarazzarsi degli errori che ho appena sostituito tutti questi tipi this con il tipo di classe o interfaccia che contiene. Ad esempio, gli errori nell'esempio proposta sono fissati cambiando a questo:

export interface EventEmitter { 
    addListener(event: string, listener: Function): EventEmitter; 
    ... 
} 

Sebbene, questa non è una soluzione al problema effettivo.

+3

Questo sembra un bug in WebStorm. – SLaks

+0

Penso che SLaks abbia ragione. Funziona bene per me in Atom. – rgvassar

risposta

2

Sembra che usi la vecchia versione di WebStorm. WebStorm supporta 'questo' tipo a partire dalla v11.0.3.

1

Il seguente codice compila bene nel parco giochi dattiloscritto:

export interface E 
{ 
    b(): this; 
} 

class A implements E 
{ 
    public b(): any 
    { 
     return 123; 
    } 
} 

let a = new A(); 
console.log(a.b()); 

E secondo link 'questo' viene interpretato come 'qualsiasi'. Quindi molto probabilmente c'è qualcosa con la webstorm.

+1

È un [polimorfico] (https://github.com/Microsoft/TypeScript/pull/4910). Non sarà interpretato come "qualsiasi". –

+0

Grazie per aver segnalato questo. – Amid

+0

Potete per favore chiarirmi questo. Logicamente ho anche inizialmente pensato che questo dovrebbe puntare al tipo di proprietario. Ma poi ho avuto problemi nell'implementare l'interfaccia nel mio esempio. Se cambio in 'public b(): E' o 'public b(): A' non verrà compilato. L'unica cosa che funzionava era "qualsiasi". Come in modo corretto per implementare tale interfaccia? – Amid

3

Am I perhaps using an old TypeScript compiler ... ?

Sì, aggiornare almeno TS 1.7 per ottenere polymorphic this supporto.

Problemi correlati