2012-10-11 11 views
26

Mi piacerebbe definire un'interfaccia con una proprietà readonly. Per esempio;È possibile utilizzare getter/setter nelle interfacce TypeScript?

interface foo { 
    get bar():bool; 
} 

Tuttavia, questo dà l'errore di sintassi, "previsto"; "" sulla barra. Ho configurato il mio VisualStudio per utilizzare il target ES5, quindi i getter sono supportati. Si tratta di una limitazione delle interfacce? Potrebbe questo cambiamento in futuro; è una cosa molto bella essere in grado di fare.

+2

Vedi http: // StackOverflow .com/questions/12838248/is-it-possible-to-use-getter-setters-in-interface-definition –

+2

Sì, questa è una limitazione delle interfacce. Vedi anche [questa domanda] [1]. [1]: http://stackoverflow.com/questions/12838248/is-it-possible-to-use-getters-setters-in-interface-definition – Valentin

risposta

16

Sì, questa è una limitazione di interfacce. Indipendentemente dal fatto che l'accesso alla proprietà sia implementato con un getter è un dettaglio di implementazione e quindi non dovrebbe essere parte dell'interfaccia pubblica. Vedi anche this question.

Se avete bisogno di un attributo di sola lettura specificato in un'interfaccia, è possibile aggiungere un metodo getter:

interface foo { 
    getAttribute() : string; 
} 
+8

Purtroppo, non è un dettaglio di implementazione che è di sola lettura. Vorrei poterlo esprimere in Typescript. – Ezward

+0

Vedo. Quindi penso che il tuo unico modo sia specificare un metodo getter. Ho aggiornato la mia risposta di conseguenza. – Valentin

+2

Presumibilmente questo diventerà possibile a macchina 2.0: https://github.com/Microsoft/TypeScript/pull/6532 –

24

proprietà getter-only sono stati introdotti in Typescript 2.0:

interface foo { 
    readonly bar: boolean; 
} 
+1

Se non mi sbaglio, questo dichiara ancora 'bar' come una proprietà, non un getter. –

+1

@AlexanderAbakumov the readonly non specifica che deve essere una proprietà. Poiché le proprietà sono referenziate nello stesso modo dei getter, la classe che implementa questa interfaccia è libera di usare una proprietà o un getter. – nikeee

+0

@nikeee: Sì, ma OP ha chiesto se possiamo usare getter/setter in interfacce, non proprietà. –

Problemi correlati