Rozwiązanie z komentarzem
Opublikowano 2 września 2026Rozwiązanie
type PartialBy<T, K extends keyof T> = Flatten<Omit<T, K> & Partial<Pick<T, K>>>Najczęstsza błędna odpowiedź
type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>Wszystko tu się zgadza poza kształtem. { a: string } & { b?: number } przyjmuje i odrzuca dokładnie te same wartości co { a: string; b?: number }, ale to nie ten sam *typ*, a Equal porównuje typy, nie zachowanie. Przecięcie to dwa obiekty stojące obok siebie; sprawdzenie prosi o jeden.
Linia po linii
Omit<T, K> & Partial<Pick<T, K>>Podziel obiekt na dwie części: klucze, które zostają bez zmian, i klucze, które stają się opcjonalne. Każda połowa z osobna jest łatwa.
Flatten<...>Homomorficzne mapowanie po przecięciu przechodzi każdy klucz raz i odbudowuje jeden obiekt — a że jest homomorficzne,
?przeżywa tę podróż.
Do zapamiętania
Przecięcia służą do składania typu obiektu; homomorficzne mapowanie służy do jego wykończenia. Złożenie bez wykończenia to najczęstszy powód, dla którego poprawnie wyglądające rozwiązanie nie przechodzi tych sprawdzeń.

