Przejdź do treści

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    TS2741

    Brakuje wymaganej właściwości

    Property 'b' is missing in type '{ a: number; }' but required in type 'Need'.

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

    Obiekt ma właściwy kształt na tyle, na ile sięga — tylko nie sięga dość daleko. Każda właściwość wymagana przez cel musi być obecna.

    Odtworzenie

    type Need = { a: number; b: string }
    
    const x: Need = { a: 1 }

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

    Dlaczego kompilator tak mówi

    To najprzyjaźniejszy błąd na tej liście, bo nazywa dokładną właściwość i oba typy. Pojawia się tam, gdzie zwykła porażka przypisywalności byłaby mętniejsza, i znaczy, że kompilator rozpoznał, co budujesz, i widzi dokładnie, czego brakuje. Traktuj to jak listę kontrolną, a nie odmowę.

    Naprawy

    1. 01
      type Need = { a: number; b: string }
      
      const x: Need = { a: 1, b: 'two' }

      Podaj ją.

    2. 02
      type Need = { a: number; b?: string }
      
      const x: Need = { a: 1 }

      Albo uczyń ją opcjonalną, jeśli naprawdę taka jest. Rób to tylko wtedy, gdy wartość bez `b` jest poprawna — nie po to, by ominąć błąd.

    Wniosek

    Opcjonalna właściwość to twierdzenie o twojej domenie, a nie sposób na uciszenie kompilatora. Dodanie `?`, by zdusić ten błąd, przesuwa awarię na tego, kto później tę wartość przeczyta.

    Błędy