Przejdź do treści

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    TS2420

    Klasa nie implementuje swojego interfejsu

    Class 'L' incorrectly implements interface 'J'.…

    Własne słowa kompilatora. Nietłumaczone — to ten ciąg, który wkleiłeś w wyszukiwarkę.

    Klasa napisała `implements`, a potem tego nie zrobiła. Szczegół poniżej nazywa dokładnie, czego brakuje albo co się nie zgadza.

    Odtworzenie

    interface J {
      a: number
    }
    
    class L implements J {
    }

    Build potwierdza, że to emituje dokładnie ten kod.

    Dlaczego kompilator tak mówi

    `implements` to sprawdzenie, nie polecenie: nie dodaje klasie niczego, tylko prosi kompilator o potwierdzenie, że klasa już spełnia interfejs. Dlatego usunięcie klauzuli sprawia, że błąd znika, nie czyniąc klasy ani trochę poprawniejszą — interfejs nigdy nie był źródłem składowych, tylko ich specyfikacją.

    Naprawy

    1. 01
      interface J {
        a: number
      }
      
      class L implements J {
        a = 1
      }

      Zaimplementuj to, co obiecano.

    2. 02
      interface J {
        a?: number
      }
      
      class L implements J {
      }

      Albo zmień specyfikację, jeśli składowa nigdy naprawdę nie była wymagana. Warto tylko wtedy, gdy każdy inny implementujący poradzi sobie z jej brakiem.

    Wniosek

    Usunięcie `implements`, by się tego pozbyć, usuwa jedyną rzecz sprawdzającą klasę. Ten błąd jest funkcją, nie usterką.

    Błędy