Estou convertendo algum código TypeScript usando uma captura codificada de "this":
var _this = this;
var querySucceeded = function(data){
this.doSomething(data);
}
var test = this.executeQuery().then(function(data){
_this.querySucceeded(data);
});
para usar lambdas:
var querySucceeded = function(data){
this.doSomething(data);
}
var test = this.executeQuery().then((data) => {
this.querySucceeded(data);
});
O TypeScript compila o JS em algo parecido com o primeiro bloco de código e tudo funciona bem no navegador. O problema é ao depurar no Visual Studio. Quando inspeciono "this" após o lambda, ele mostra as propriedades da janela, em vez do contexto da classe.
Se eu depurar diretamente no navegador, ele mostra o contexto local como deveria. Isto é um problema conhecido? Talvez haja um problema com os mapeamentos entre o arquivo JS e o arquivo TS?
Estou usando o VS2013 Update 4 e o TypeScript 1.4.
O problema é que o depurador não conhece typescript, tudo o que sabe é javascript e um mapa de origem. o arquivo de mapa de origem apenas lista os mapeamentos para instruções de source(.ts) para target (.js), mas não rastreia variáveis renomeadas (por exemplo, _this).
Estamos cientes desse problema, e ele vem de longa data. a questão é mais urgente agora, pois estamos fazendo mais dessas reescritas com alterações de propriedades let, const, desestruturação e computadas.
Quando 2859 for corrigido, isso também deve "simplesmente funcionar" nas ferramentas de desenvolvedor do IE, ou seja, ocultará a tradução. No entanto, a fiação não foi feita no Visual Studio neste momento.
Ainda é um problema com o código vs com es5 e função de seta, é realmente irritante deve ser resolvido com uma prioridade mais alta.
Comentários muito úteis
Ainda é um problema com o código vs com es5 e função de seta, é realmente irritante deve ser resolvido com uma prioridade mais alta.