Przejdź do treści

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    TS2345

    Zły typ argumentu

    Argument of type 'number' is not assignable to parameter of type 'string'.

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

    Ta sama porażka przypisywalności co TS2322, tyle że w miejscu wywołania. Osobny kod, bo naprawa niemal zawsze leży gdzie indziej.

    Odtworzenie

    declare function take(value: string): void
    
    take(1)

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

    Dlaczego kompilator tak mówi

    Parametr to zmienna, którą funkcja deklaruje w twoim imieniu, więc przekazanie argumentu jest przypisaniem i podlega tym samym regułom. Ma własny kod, bo ciekawe pytanie jest inne: przy TS2322 zwykle wybrałeś złą wartość, a przy TS2345 zwykle wołasz coś, co oczekuje kształtu, którego jeszcze nie zbudowałeś. Funkcja powiedziała ci dokładnie, czego chce, w drugiej połowie komunikatu.

    Naprawy

    1. 01
      declare function take(value: string): void
      
      take('1')

      Przekaż to, o co prosiła.

    2. 02
      declare function take(value: string | number): void
      
      take(1)

      Albo zmień sygnaturę, jeśli funkcja od początku powinna to przyjmować. Warto tylko wtedy, gdy funkcja jest twoja, a jej ciało naprawdę jest bezpieczne dla szerszego typu.

    Wniosek

    Druga połowa komunikatu to specyfikacja. Zbuduj to, zamiast sięgać po `as`, żeby uciszyć pierwszą połowę.

    Błędy