Przejdź do treści

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    TS2769

    Żadne przeciążenie nie pasuje

    No overload matches this call.

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

    Funkcja ma kilka sygnatur, a argumenty nie pasują do żadnej. Kompilator raportuje wtedy każdą próbę i dlatego ten błąd jest tak długi.

    Odtworzenie

    declare function f(a: string): void
    declare function f(a: number): void
    
    f(true)

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

    Dlaczego kompilator tak mówi

    Rozstrzyganie przeciążeń próbuje kolejnych sygnatur w kolejności deklaracji i zatrzymuje się na pierwszej pasującej. Gdy nie pasuje żadna, nie ma jednego „właściwego” błędu do zgłoszenia, więc zgłaszana jest porażka każdego kandydata po kolei. Przydatna część to prawie nigdy pierwszy wiersz: to lista pod nim, gdzie zwykle jeden kandydat zawiódł z dużo drobniejszego powodu niż reszta.

    Naprawy

    1. 01
      declare function f(a: string): void
      declare function f(a: number): void
      
      f('true')

      Dopasuj się do jednej z nich. Znajdź na liście kandydata o najdrobniejszej skardze i spełnij właśnie jego wymagania.

    2. 02
      declare function f(a: string): void
      declare function f(a: number): void
      declare function f(a: boolean): void
      
      f(true)

      Albo dodaj brakujące przeciążenie, jeśli funkcja powinna obsługiwać ten kształt. Przeciążenia to lista zamierzonych zastosowań; nowe zastosowanie to nowy wpis.

    Wniosek

    Czytaj błędy przeciążeń od dołu. Ostatni kandydat to zwykle ten, o który ci chodziło, a jego skarga jest tą wartą naprawy.

    Błędy