Przejdź do treści
TS2352

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    TS2352

    Podejrzana konwersja typu

    Conversion of type 'string' to type 'number' may be a mistake because neither type sufficiently overlaps with the other.

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

    Asercja typu przeskakuje między niepowiązanymi typami i nie wykona konwersji w czasie działania, którą sugeruje zapis.

    Odtworzenie

    const count = '12' as number

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

    Dlaczego kompilator tak mówi

    Asercje zmieniają punkt widzenia kontrolera, nigdy wartość JavaScript. Tekst zadeklarowany jako `number` wciąż jest tekstem w czasie działania, więc TypeScript blokuje najbardziej oczywiste przeskoki i prosi o jawny zamiar.

    Naprawy

    1. 01
      const count = Number('12')

      Wykonaj prawdziwą konwersję w czasie działania, gdy wartość ma stać się liczbą.

    2. 02
      const input: unknown = '12'
      
      if (typeof input !== 'string') {
        throw new Error('Expected text')
      }
      
      const count = Number(input)

      Dla danych zewnętrznych sprawdź wartość z `unknown`, zanim ją skonwertujesz.

    Wniosek

    `as` nie jest rzutowaniem w sensie wykonania. Parsuj lub sprawdzaj wartości; asercje zostaw dla informacji, których kompilator naprawdę nie może zobaczyć.

    Dokąd dalej

    Błędy