Kształty obiektów
Required
Usuwa `?` z każdej właściwości, na jednym poziomie.
Czym jest
Lustro `Partial`, zapisane przez `-?`. Minus to cały mechanizm: modyfikatory w typie mapowanym można dodawać przez `+?` i usuwać przez `-?`, a `Required` to standardowa biblioteka używająca drugiego. Zdejmuje też `undefined` z typu właściwości, co jest osobnym efektem, którego rzadko się oczekuje.
Przykłady
Required<{ a?: string; b?: number }>→{ a: string; b: number; }Required<{ a?: string | undefined }>→{ a: string; }`undefined` też znika — `-?` usuwa je z typu, nie tylko `?` z klucza.
Required<{ a: string }>→{ a: string; }
Każdy rozwinięty typ powyżej wypisał TypeScript 5.9.3, nie ręka człowieka.
Czego nie robi
- Nie czyni właściwości nie-nullową. `Required<{ a?: string | null }>` wciąż ma w sobie `null` — usuwane jest tylko `undefined`.
- Też nie jest głębokie. Symetria z `Partial` sięga aż po ograniczenie.
Wniosek
`-?` robi dwie rzeczy naraz: usuwa opcjonalność i usuwa `undefined`. Większość zamieszania wokół `Required` to ta druga, przychodząca bez zapowiedzi.