Przejdź do treści

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    TS2339

    Nie ma takiej właściwości

    Property 'b' does not exist on type '{ a: number; }'.

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

    Sięgnąłeś po właściwość, której typ nie ma. Często typ jest dobry, a pisownia zła; czasem typ jest węższy, niż wartość naprawdę jest.

    Odtworzenie

    declare const o: { a: number }
    
    o.b

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

    Dlaczego kompilator tak mówi

    Typy obiektowe są dokładne co do swojej zawartości. Kompilator nie mówi, że właściwości brakuje w czasie wykonania — może istnieć — tylko że nic w programie nie zapowiedziało jej istnienia, więc nic nie można o niej założyć. Gdy wartość przyszła z JSON-a albo z API, ten błąd jest zwykle słuszny, a kłamie typ.

    Naprawy

    1. 01
      declare const o: { a: number; b: string }
      
      o.b

      Dodaj ją do typu, jeśli wartość naprawdę ją niesie. Typ jest opisem; spraw, by opisywał prawdę.

    2. 02
      declare const o: { a: number; b?: string }
      
      if (o.b !== undefined) {
        o.b.trim()
      }

      Albo oznacz ją jako opcjonalną i sprawdzaj, jeśli bywa obecna. To kształt pasujący do rzeczywistości dla wszystkiego, co sparsowane, a nie skonstruowane.

    Wniosek

    Ten błąd to spór między twoim typem a twoją wartością. Zdecyduj, które z nich się myli, zanim zmienisz którekolwiek.

    Błędy