Deve criar uma variável chamada _este conflito com isso?
-
13-12-2019 - |
Pergunta
Este é um exemplo imaginário, mas vamos supor que vamos criar uma variável _this
em algum lugar em uma função de classe.
class Person {
constructor (public name : string) {}
changeName(name) {
var _this = {};
(() => {
this.name = name;
})();
}
}
Isto não irá funcionar como esperado quando chamamos o changeName
função porque a parte relevante do código compilado parecido com este:
var _this = this;
var _this = {};
(function () {
_this.name = name;
})();
Isto é ruim Javascript:temos dois var
declarações de substituir uns aos outros.O _this
criado pelo compilador está a ser substituído pela minha _this
.
Tanto quanto eu posso ver, esse comportamento não for especificado no TypeScript spec.
Por que elas devem conflito?Não pode o compilador detecta se eu criei uma variável chamada _this
e o nome gerado automaticamente um algo mais, como _this2
para manter a minha variáveis e o gerado pelo compilador queridos do atropelando uns aos outros?
Solução
O compilador irá criar automaticamente _this
como uma referência para this
para facilitar o encerramento que será criado usando lambda sintaxe.Eu tenho certeza que eu leia esta no TypeScript especificação em algum lugar, mas eu concordo que o compilador deve emitir um erro neste caso.
Eu não gosto da idéia de que o compilador variados como ele emite javascript como este está em conflito com o objetivo declarado de gerar "idiomática" (e, portanto, previsível) de javascript.
Outras dicas
Não é o que você chamaria de um reservados variável?Eu acho que você não iria declarar uma variável chamada "isto" ou "documento" quer.
Desde que o MS é claro que o reservados as variáveis são, eu não acho que há um grande problema.Talvez pudessem melhorar o compilador para a saída de avisos embora.