Saltar al contenido
webtype.orgwebtype.orgtsconfig

    ↑↓ mover · ⏎ abrir · esc cerrar

    tsconfig

    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": false
    export const counter = {
      total: 0,
      bump: function () {
        return function () {
          return this.total
        }
      },
    }

    Compila limpio

    Con ella encendida

    "noImplicitThis": true
    export 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