Unie w typach obiektowych

Опубликовано: 17 Июнь 2026
на канале: Rafał Koduje
140
15

Typy obiektowe to takie, które opisują kształt obiektów.

Można tworzyć z nich typy unii, wiąże się jednak z typ pewien "haczyk". A mianowicie musimy podpowiedzieć przy typescript'owi, który alias składający się na typ unii powinien wziąć pod uwagę. Jeżeli tego nie zrobimy dla zmiennej, która ma nadany typ unii typescript będzie tylko akceptował klucze będące częścią wspólną w tych aliasach. Inne uzna za nieistniejące. Jest to zachowanie jak najbardziej słuszne i godne pochwały.

Gdyśmy np. przypasali do zmiennej wartość w postaci obiektu o określonym typie wchodzącym w skład unii, a później w kodzie chcieli odwołać się do jej właściwości nie istniejącej, ale istniejącej w innym typie wchodzącym w skład unii? To byłby klops. Typescript jako dobry "duszek" na to nie pozwoli. Od razu da nam po łapach - podkreślając nieprawidłowy kod.

Rozwiązaniem, o którym mówię w filmie jest zawężanie typów unii oraz unie dyskryminowane.
Pierwsze rozwiązanie polega na sprawdzeniu, czy w obiekcie znajduje się dany klucz. Czynimy to za pomocą instrukcji if. I ta podpowiedź w zupełności typescriptowi wystarcza. Drugie rozwiązanie polega na sprawdzeniu wartości z klucza, który występuje w każdym z typów wchodzących w skład unii i jest on wyróżnikiem tzn. nie powtarza się. Tak na marginesie nie wiem dlaczego taka dziwna nazwa - unie dyskryminowane. Nijak mi się to nie kojarzy z efektem działania.

Wiem, że temat może wydawać się nieco skomplikowany. Starałem się, go wyjaśnić. Gdybym to jednak zrobił źle to wybaczcie mi za brak profesjonalnych umiejętności przekazywania wiedzy.