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": falseexport const counter = { total: 0, bump: function () { return function () { return this.total } }, }
Kompiluje się czysto
Z włączoną
"noImplicitThis": trueexport 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

