Przejdź do treści
webtype.orgwebtype.orgtsconfig

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    tsconfig

    noImplicitThis

    this musi być rozpoznawalne

    Wewnątrz zwykłej funkcji zagnieżdżonej `this` nie jest obiektem, w którym ją napisałeś — a bez tej flagi jest po cichu `any`.

    Od
    TypeScript 2.0
    strict
    W strict
    W twoim tsconfigu
    "noImplicitThis": true

    Ten sam fragment za każdym razem. Zmieniła się tylko opcja.

    Z wyłączoną

    "noImplicitThis": false
    export const counter = {
      total: 0,
      bump: function () {
        return function () {
          return this.total
        }
      },
    }

    Kompiluje się czysto

    Z włączoną

    "noImplicitThis": true
    export const counter = {
      total: 0,
      bump: function () {
        return function () {
          return this.total
        }
      },
    }

    Zgłasza TS2683

    Dlaczego kompilator się tym przejmuje

    JavaScript wiąże `this` w miejscu wywołania, więc funkcja zagnieżdżona w metodzie dostaje to, co poda wywołujący — a zwykle nie podaje nic. To najstarszy błąd w tym języku i przeżywa typowanie w całości, bo nieotypowane `this` to `any`, a `any.total` jest w porządku. Flaga zmusza kompilator do przyznania, że nie wie — i to jest moment, w którym albo piszesz funkcję strzałkową, albo deklarujesz parametr `this`.

    Wniosek

    Funkcja strzałkowa nie ma własnego `this` — i właśnie dlatego jest rozwiązaniem.

    Gdzie iść dalej

    Opcji: 22