Versão TypeScript: 2.0.3
Código
interface UIElement {
addClickListener(onclick: (this: UIElement, e: Event) => void): void;
prop: number;
}
let uiElement: UIElement;
uiElement.addClickListener(() => {
var k = this.prop;
});
Comportamento esperado:
Sem erro
Comportamento real:
tsc.exe --noImplicitThis blah.ts
blah.ts (8,10): erro TS2683: 'this' implicitamente tem o tipo 'any' porque não tem uma anotação de tipo.
Em seu exemplo, você está usando uma função de seta - portanto, this
disponível dentro desta função é o mesmo que this
fora - que não tem nenhuma informação de tipo (qualquer)
Use function
e você receberá o seguinte:
interface UIElement {
addClickListener(onclick: (this: UIElement, e: Event) => void): void;
prop: number;
}
let uiElement: UIElement;
uiElement.addClickListener(function() {
var k = this.prop;
});
O comportamento parece bom para mim. Ele detecta erros relacionados ao uso indevido das funções das setas.
Comentários muito úteis
Em seu exemplo, você está usando uma função de seta - portanto,
this
disponível dentro desta função é o mesmo quethis
fora - que não tem nenhuma informação de tipo (qualquer)Use
function
e você receberá o seguinte:O comportamento parece bom para mim. Ele detecta erros relacionados ao uso indevido das funções das setas.