Jaki jest cel type guards
w TypeScript i jak zwiększają one bezpieczeństwo typów?
Type guards to sposób na zawężenie typu zmiennej w bloku warunkowym. Pozwalają TypeScript'owi zrozumieć, jakiego typu jest zmienna, co pomaga zapewnić, że operacje na tej zmiennej są bezpieczne i odpowiednie dla jej typu. Type guards są szczególnie przydatne w scenariuszach z typami unii, gdzie zmienna może być jednym z kilku różnych typów.
Jak działają Type Guards
Type guards są zwykle implementowane za pomocą warunkowych kontroli, takich jak typeof
, instanceof
, lub zdefiniowanych przez użytkownika predykatów typów.
-
Użycie
typeof
:function printId(id: number | string) { if (typeof id === 'string') { console.log('Twój ID to ' + id.toUpperCase()); } else { console.log('Twój ID to ' + id.toFixed(2)); } }
W tym przykładzie operator
typeof
jest używany do sprawdzenia, czyid
jest stringiem czy liczbą, co pozwala na bezpieczne wywołanie metod dla każdego typu. -
Użycie
instanceof
:class Dog { bark() { console.log('Woof!'); } } class Cat { meow() { console.log('Meow!'); } } function makeSound(animal: Dog | Cat) { if (animal instanceof Dog) { animal.bark(); } else { animal.meow(); } }
Tutaj
instanceof
jest używany do sprawdzenia, czyanimal
jest instancjąDog
czyCat
, co pozwala na wywołanie odpowiedniej metody. -
Zdefiniowane przez użytkownika Type Guards:
interface Fish { swim(): void; } interface Bird { fly(): void; } function isFish(pet: Fish | Bird): pet is Fish { return (pet as Fish).swim !== undefined; } function move(pet: Fish | Bird) { if (isFish(pet)) { pet.swim(); } else { pet.fly(); } }
W tym przykładzie stworzona jest niestandardowa funkcja typu guard
isFish
, która określa, czypet
jestFish
. Częśćpet is Fish
jest predykatem typu, który informuje TypeScript o typie wewnątrz blokuif
.
Korzyści z Type Guards
- Zwiększone Bezpieczeństwo Typów: Zawężając typy w blokach warunkowych, zmniejszasz ryzyko błędów w czasie wykonania i nieprawidłowych założeń co do typu.
- Poprawiona Czytelność Kodu: Type guards jasno określają, jakiego typu zmienna jest oczekiwana w różnych punktach kodu.
- Lepsze Wsparcie Narzędzi: Dzięki dokładnym informacjom o typach, IDE mogą zapewnić lepsze uzupełnianie kodu i sprawdzanie błędów.
Ogólnie rzecz biorąc, type guards to potężna funkcja w TypeScript, która zapewnia, że Twój kod działa bezpiecznie i zgodnie z oczekiwaniami, szczególnie przy pracy z złożonymi typami.