Przejdź do treści

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    TS2322

    Nie da się przypisać

    Type 'number' is not assignable to type 'string'.

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

    Najczęstszy błąd TypeScriptu. Wartość jednego typu trafiła tam, gdzie wymagany był inny, a te dwa nie są zgodne w tę stronę.

    Odtworzenie

    const value: string = 1

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

    Dlaczego kompilator tak mówi

    Przypisywalność ma kierunek, a komunikat zawsze czyta się źródło-potem-cel. Ta kolejność to cała diagnostyka: „`number` nie da się przypisać do `string`” nie mówi nic o tym, czy zadziałałoby odwrotnie. Gdy komunikat zaskakuje, zwykle dlatego, że czyta się go jak zdanie o równości — a to zdanie o jednokierunkowym podstawieniu, i połowa TypeScriptu wynika z tego rozróżnienia.

    Naprawy

    1. 01
      const value: string = String(1)

      Przekonwertuj wartość, jeśli o konwersję ci chodziło. To uczciwa naprawa i ta, która przechodzi przez review.

    2. 02
      const value: string | number = 1

      Albo poszerz cel, jeśli naprawdę mieści oba. Unia mówi, że zmienna faktycznie może być jednym albo drugim — to inne twierdzenie niż rzutowanie i o wiele bezpieczniejsze.

    Wniosek

    Czytaj komunikat jak strzałkę, nie znak równości. Źródło po lewej, cel po prawej, a pytanie zawsze brzmi, czy lewe może zastąpić prawe.

    Dokąd dalej

    Błędy