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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top