noImplicitThis
this tiene que ser conocible
Dentro de una función anidada normal, `this` no es el objeto donde la escribiste, y sin esta bandera es silenciosamente `any`.
- Desde
- TypeScript 2.0
- strict
- En strict
- En tu tsconfig
"noImplicitThis": true
El mismo fragmento las dos veces. Solo cambió la opción.
Con ella apagada
"noImplicitThis": falseexport const counter = { total: 0, bump: function () { return function () { return this.total } }, }
Compila limpio
Con ella encendida
"noImplicitThis": trueexport const counter = { total: 0, bump: function () { return function () { return this.total } }, }
Emite TS2683
Por qué al compilador le importa
JavaScript enlaza `this` en el punto de llamada, así que una función anidada dentro de un método recibe lo que le pase quien la llame, que suele ser nada. Es el error más antiguo del lenguaje y sobrevive al tipado por completo, porque un `this` sin tipo es `any` y `any.total` está bien. La bandera obliga al compilador a admitir que no lo sabe, y ese es el momento en que o escribes una función flecha o declaras un parámetro `this`.
Conclusión
Una función flecha no tiene `this` propio, y justo por eso es el arreglo.
Adónde ir después
22 opciones

