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
- 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.
- 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.