Estou tentando criar método get e set para uma propriedade:
private _name: string;
Name() {
get:
{
return this._name;
}
set:
{
this._name = ???;
}
}
Qual é a palavra-chave para definir um valor?
typescript
MuriloKunze
fonte
fonte
typescript private name: string; getName() { get: { return this.name; } set: { this.name = ???; } }
Respostas:
O TypeScript usa a sintaxe getter / setter, semelhante ao ActionScript3.
Isso produzirá esse JavaScript, usando o
Object.defineProperty()
recurso ECMAScript 5 .Então, para usá-lo,
No entanto, para usá-lo, verifique se o compilador TypeScript tem como alvo o ECMAScript5. Se você estiver executando o compilador de linha de comando, use
--target
sinalizador como este;Se você estiver usando o Visual Studio, edite o arquivo do projeto para adicionar o sinalizador à configuração da ferramenta de construção TypeScriptCompile. Você pode ver isso aqui :
Como o @DanFromGermany sugere abaixo, se você está simplesmente lendo e escrevendo uma propriedade local como
foo.bar = true
, ter um par de setter e getter é um exagero. Você sempre pode adicioná-los mais tarde se precisar fazer algo, como log, sempre que a propriedade for lida ou gravada.fonte
myFoo.bar = true
vez demyFoo.bar(true);
oumyFoo.setBar(true);
?Ezward já forneceu uma boa resposta, mas notei que um dos comentários pergunta como é usado. Para pessoas como eu que se deparam com essa questão, pensei que seria útil ter um link para a documentação oficial sobre getters e setters no site da Typecript, pois isso explica bem, espero que sempre fique atualizado quando houver mudanças. made e mostra um exemplo de uso:
http://www.typescriptlang.org/docs/handbook/classes.html
Em particular, para aqueles que não estão familiarizados com isso, observe que você não incorpora a palavra 'get' em uma chamada para um getter (e da mesma forma para os setters):
Você deve simplesmente fazer o seguinte:
dada uma aula como:
então, o getter 'bar' da propriedade privada '_bar' será chamado.
fonte
Aqui está um exemplo prático que deve apontar você na direção certa:
Getters e setters em JavaScript são apenas funções normais. O setter é uma função que aceita um parâmetro cujo valor é o valor que está sendo definido.
fonte
static
.Foo._name
deve ser substituído porthis._name
Você pode escrever isso
fonte
public
aqui define membros duplicados.O TS oferece getters e setters que permitem que as propriedades do objeto tenham mais controle de como elas são acessadas (getter) ou atualizadas (setter) fora do objeto. Em vez de acessar ou atualizar diretamente a propriedade, uma função de proxy é chamada.
Exemplo:
fonte
É muito semelhante à criação de métodos comuns, basta colocar a palavra-chave reservada
get
ouset
no início.Nesse caso, você pode pular o tipo de retorno
get getMethod1() {
fonte
Eu acho que provavelmente entendo porque é tão confuso. No seu exemplo, queríamos getters e setters para
_name
. Mas conseguimos isso criando getters e setters para uma variável de classe não relacionadaName
.Considere isto:
O código acima faz o seguinte:
get
eset
crie getter e setter parayourCarTiresCount
( não paratiresCount
).O getter é:
e o levantador é:
Significado, toda vez que fazemos
new Car().yourCarTiresCount
, getter é executado. E para cadanew Car().yourCarTiresCount('7')
setter é executado.tireCount
.fonte
Se você está procurando uma maneira de usar get e set em qualquer objeto (não uma classe),
Proxy
pode ser útil: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ProxyNota: lembre-se de que esta nova API não é suportada e é necessário polifill para navegadores antigos
fonte
Se você estiver trabalhando com módulos TypeScript e tentando adicionar um getter que é exportado, é possível fazer algo assim:
Em outro arquivo, você tem:
fonte
this
deve ser indefinido no escopo de nível superior de um módulo. Você poderia usarexports
em vez, mas você não deve fazê-lo em tudo, pois está praticamente garantido para problemas de compatibilidade de causa