type listas handbook enum typescript

listas - typescript types



¿Cuál es el equivalente de protegido en TypeScript? (3)

¿Cuál es el equivalente de protegido en TypeScript ?

Necesito agregar algunas variables miembro en la clase base para usar solo en clases derivadas .


Actualizaciones

12 de noviembre de 2014. La versión 1.3 de TypeScript está disponible e incluye la palabra clave protegida.

26 de septiembre de 2014. La palabra clave protected ha aterrizado. Actualmente es prelanzamiento. Si está utilizando una versión muy nueva de TypeScript, ahora puede usar la palabra clave protected ... la respuesta a continuación es para versiones anteriores de TypeScript. Disfrutar.

github.com/Microsoft/TypeScript/pull/688

class A { protected x: string = ''a''; } class B extends A { method() { return this.x; } }

Vieja respuesta

TypeScript solo tiene privacidad, no está protegido y esto solo significa privado durante la verificación en tiempo de compilación.

Si quieres acceder a super.property , tiene que ser público.

class A { // Setting this to private will cause class B to have a compile error public x: string = ''a''; } class B extends A { method() { return super.x; } }


¿Qué tal el siguiente enfoque?

interface MyType { doit(): number; } class A implements MyType { public num: number; doit() { return this.num; } } class B extends A { constructor(private times: number) { super(); } doit() { return super.num * this.times; } }

Dado que la variable num se define como pública, esto funcionará:

var b = new B(4); b.num;

Pero como no está definido en la interfaz, esto:

var b: MyType = new B(4); b.num;

dará como resultado The property ''num'' does not exist on value of type ''MyType'' .
Puedes probarlo en este playground .

También puede envolverlo en un módulo mientras exporta solo la interfaz, luego, desde otros métodos exportados puede devolver las instancias (fábrica), de esa manera el alcance público de las variables estará "contenido" en el módulo.

module MyModule { export interface MyType { doit(): number; } class A implements MyType { public num: number; doit() { return this.num; } } class B extends A { constructor(private times: number) { super(); } doit() { return super.num * this.times; } } export function factory(value?: number): MyType { return value != null ? new B(value) : new A(); } } var b: MyModule.MyType = MyModule.factory(4); b.num; /// The property ''num'' does not exist on value of type ''MyType''

Versión modificada en este playground .

Sé que no es exactamente lo que pediste, pero está bastante cerca.