Możliwe undefined
'maybe.a' is possibly 'undefined'.Własne słowa kompilatora. Nietłumaczone — to ten ciąg, który wkleiłeś w wyszukiwarkę.
Opcjonalna właściwość została użyta bez sprawdzenia. Przy `strictNullChecks` „opcjonalna” znaczy, że nieobecność jest częścią typu i trzeba ją obsłużyć.
Odtworzenie
declare const maybe: { a?: { b: number } } maybe.a.b
Build potwierdza, że to emituje dokładnie ten kod.
Dlaczego kompilator tak mówi
Bez `strictNullChecks` to się kompiluje i wybucha w czasie wykonania; z nim luka staje się widoczna tam, gdzie da się ją jeszcze naprawić. Błąd nie prosi o dowód, że wartość istnieje — prosi, byś powiedział, co ma się stać, gdy jej nie ma, a na to pytanie kod po cichu odpowiadał „awaria”.
Naprawy
- 01
declare const maybe: { a?: { b: number } } const value = maybe.a?.b
Opcjonalne łączenie odpowiada „nic się nie dzieje, wynikiem jest `undefined`” — co jest słuszne, gdy wołający sobie z tym radzi.
- 02
declare const maybe: { a?: { b: number } } if (maybe.a) { const value = maybe.a.b }
Strażnik odpowiada „w takim razie nie robimy nic” i zawęża typ dla całego bloku, a nie jednego dostępu.
Wniosek
Asercja niepustości `!` też to ucisza i jest jedyną naprawą, która odpowiada na pytanie obietnicą zamiast kodem. Zostaw ją na przypadki, które naprawdę potrafisz udowodnić.