2012-10-11 26 views
26

Me gustaría definir una interfaz con una propiedad de solo lectura. Por ejemplo;¿Es posible utilizar getters/setters en TypeScript Interfaces?

interface foo { 
    get bar():bool; 
} 

Sin embargo, esto da el error de sintaxis, "expected"; '"en la barra. He configurado mi VisualStudio para usar el objetivo ES5, por lo que los getters son compatibles. ¿Es esto una limitación de las interfaces? Podría este cambio en el futuro; es algo muy bueno poder hacer.

+2

Ver http: // stackoverflow .com/questions/12838248/is-it-possible-to-use-getters-setters-in-interface-definition –

+2

Sí, esto es una limitación de las interfaces. Ver también [esta pregunta] [1]. [1]: http://stackoverflow.com/questions/12838248/is-it-possible-to-use-getters-setters-in-interface-definition – Valentin

Respuesta

16

Sí, esto es una limitación de las interfaces. Si el acceso a la propiedad se implementa o no con un getter es un detalle de implementación y, por lo tanto, no debe formar parte de la interfaz pública. Vea también this question.

Si necesita un atributo de sólo lectura se especifica en una interfaz, se puede añadir un método de obtención:

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

Por desgracia, no es un detalle de implementación que es de solo lectura. Desearía poder expresar eso en Typescript. – Ezward

+0

Ya veo. Entonces creo que tu única forma es especificar un método getter. He actualizado mi respuesta en consecuencia. – Valentin

+2

Es de suponer que esto será posible en TypeScript 2.0: https://github.com/Microsoft/TypeScript/pull/6532 –

24

propiedades de captador sólo se introdujeron en Typescript 2.0:

interface foo { 
    readonly bar: boolean; 
} 
+1

Si no me equivoco, esto todavía declara 'bar' como una propiedad, no como un getter. –

+1

@AlexanderAbakumov el readonly no especifica que tiene que ser una propiedad. Como las propiedades se referencian de la misma manera que getters, la clase que implementa esta interfaz puede usar libremente una propiedad o un getter. – nikeee

+0

@nikeee: Sí, pero OP preguntó si podemos usar getters/setters en interfaces, no propiedades. –

Cuestiones relacionadas