Estoy tratando de crear el método get y set para una propiedad:
private _name: string;
Name() {
get:
{
return this._name;
}
set:
{
this._name = ???;
}
}
¿Cuál es la palabra clave para establecer un valor?
typescript
MuriloKunze
fuente
fuente
typescript private name: string; getName() { get: { return this.name; } set: { this.name = ???; } }
Respuestas:
TypeScript utiliza la sintaxis getter / setter que es como ActionScript3.
Eso producirá este JavaScript, utilizando la función ECMAScript 5
Object.defineProperty()
.Para usarlo,
Sin embargo, para poder usarlo, debe asegurarse de que el compilador TypeScript esté dirigido a ECMAScript5. Si está ejecutando el compilador de línea de comando, use el
--target
indicador como este;Si está utilizando Visual Studio, debe editar su archivo de proyecto para agregar el indicador a la configuración de la herramienta de compilación TypeScriptCompile. Puedes ver eso aquí :
Como @DanFromGermany sugiere a continuación, si simplemente está leyendo y escribiendo una propiedad local como
foo.bar = true
, tener un setter y getter pair es excesivo. Siempre puede agregarlos más adelante si necesita hacer algo, como iniciar sesión, cada vez que la propiedad se lee o se escribe.fuente
myFoo.bar = true
lugar demyFoo.bar(true);
omyFoo.setBar(true);
??Ezward ya ha proporcionado una buena respuesta, pero noté que uno de los comentarios pregunta cómo se usa. Para las personas como yo que tropiezan con esta pregunta, pensé que sería útil tener un enlace a la documentación oficial sobre getters y setters en el sitio web de Typecript, ya que eso lo explica bien, con suerte siempre estaré actualizado ya que los cambios son hecho, y muestra el uso de ejemplo:
http://www.typescriptlang.org/docs/handbook/classes.html
En particular, para aquellos que no están familiarizados con él, tenga en cuenta que no incorpora la palabra 'get' en una llamada a un getter (y de manera similar para los setters):
Simplemente debes hacer esto:
dado una clase como:
entonces se llamará al captador 'bar' para la propiedad privada '_bar'.
fuente
Aquí hay un ejemplo de trabajo que debería orientarte en la dirección correcta:
Getters y setters en JavaScript son solo funciones normales. El setter es una función que toma un parámetro cuyo valor es el valor que se está configurando.
fuente
static
.Foo._name
debería ser reemplazado conthis._name
Puedes escribir esto
fuente
public
aquí define miembros duplicados.TS ofrece getters y setters que permiten que las propiedades de los objetos tengan más control sobre cómo se accede (getter) o cómo se actualizan (setter) fuera del objeto. En lugar de acceder o actualizar directamente la propiedad, se llama una función proxy.
Ejemplo:
fuente
Es muy similar a crear métodos comunes, simplemente ponga la palabra clave reservada
get
oset
al principio.En este caso, puede omitir el tipo de retorno en
get getMethod1() {
fuente
Creo que probablemente entiendo por qué es tan confuso. En su ejemplo, queríamos getters y setters para
_name
. Pero lo logramos creando captadores y establecedores para una variable de clase no relacionadaName
.Considera esto:
El código anterior hace lo siguiente:
get
yset
crea getter y setter parayourCarTiresCount
( no paratiresCount
).El captador es:
y el setter es:
Es decir, cada vez que lo hacemos
new Car().yourCarTiresCount
, getter corre. Y por cadanew Car().yourCarTiresCount('7')
setter corre.tireCount
.fuente
Si está buscando la manera de usar get y set en cualquier objeto (no una clase)
Proxy
puede ser útil: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ProxyNota: tenga en cuenta que esta nueva API no es compatible y es necesaria para rellenar los navegadores antiguos
fuente
Si está trabajando con módulos TypeScript e intenta agregar un captador que se exporta, puede hacer algo como esto:
Luego, en otro archivo tienes:
fuente
this
debe estar indefinido en el ámbito de nivel superior de un módulo. Podría usarloexports
en su lugar, pero no debería hacerlo en absoluto, ya que está prácticamente garantizado que causará problemas de compatibilidad