Typowanie nominalne w TypeScript

Typowanie nominalne w TypeScript

hejto.pl
Zacznijmy od tego, że system typowania w TypeScript jest strukturalny, tzn. mając dwa interfejsy o takich samych polach to według kompilatora będą one kompatybilne. W skrócie: jeżeli coś wygląda jak kaczka to musi być kaczką! Stoi to w przeciwieństwie do języków obiektowych, w których dwa interfejsy muszą być "rodziną", aby były uznawane za kompilator za tożsame.
Zazwyczaj nie stanowi to problemu. Rozważmy przypadek, w którym w naszym systemie krążą wartości pieniężne i czasowe. Używamy aliasów: `type Money = number` i `type Time = number`. Nic nie stoi na przeszkodzie wziąć "pisiont" złotych i podać jako argument funkcji, która z założenia ma operować tylko na czasie. Według typowania strukturalnego wszystko się zgadza. Jak zabezpieczyć się przed takim błędem?
Na pomoc przychodzi wspomniane typowanie nominalne i zabieg nazywany brandingiem. Zdefiniujmy typ Money jako: `type Money = number & { __brand: 'Money' }`. Od tego momentu nie będziemy mogli przekazać typu `number` jako bytu tożsamego `Money`. Kompilator uchroni nas przed tym.
W układance brakuje jednego elementu - skąd brać wartość typu `Money`? Sprawa wygląda następująco: castowanie za pomocą `as` lub implementacja funkcji, która przy okazji sprawdzi, że wartość podawana konwersji może zostać przedstawiona jako `Money`. Tutaj akurat nie ma raczej czego sprawdzać, ale w przypadku czasu coś takiego mogłoby mieć miejsce, np. sprawdzalibyśmy czy wartość jest dodatnia.
#typescript #magicznytypescript

Komentarze (7)

Magiczny_Magik

Wołam @LatarniaDiogenesa, tag utworzony.

LatarniaDiogenesa

@Magiczny_Magik dzięki za zawołanie, bardzo fajny wpis Tag zaobserwowany.

rayros

Fajnie jakby @hejto potrafiło wyłapywać kod z artykułu i go kolorować.

jedikk

@Magiczny_Magik dla mnie też wpis ciekawy, również będę obserwował. Dzięki i pozdrawiam

ziggy07

@Magiczny_Magik ale czary, faktycznie magiczny TypeScipt chodź nie piszę w nim zawodowo to łap pioruna i followa

ZasilaczKomputerowy

Myślałem że w Javie się robi wiele rzeczy bez sensu.

404

Łap pioruna i czekam na kolejne wpisy.

Zaloguj się aby komentować