Introducere în TypeScript Type Guards
Protecțiile de tip sunt o funcție puternică în TypeScript care le permite dezvoltatorilor să efectueze verificări de rulare pentru a restrânge tipul unei variabile. Acest lucru asigură informații de tip mai precise, ceea ce duce la un cod mai sigur și mai previzibil. Acest articol explorează ce tip de gărzi sunt și cum să le folosești eficient.
Ce sunt gărzile de tip?
Gardienele de tip sunt expresii care efectuează verificări de rulare și permit TypeScript să deducă un tip mai specific pentru o variabilă. Ele ajută la discriminarea între diferitele tipuri, în special atunci când avem de-a face cu tipuri de sindicat. Protecțiile de tip pot fi implementate folosind diferite tehnici, inclusiv:
- Predicate de tip definite de utilizator
- Aserțiuni de tip
- Verificări ale instanțelor
- Folosind operatorul
typeof
- Folosind operatorul
in
Predicate de tip definite de utilizator
Predicatele de tip definit de utilizator sunt funcții care returnează o valoare booleană și au un tip de returnare special care indică tipul variabilei care este verificată. Iată cum să le creați și să le utilizați:
function isString(value: any): value is string {
return typeof value === 'string';
}
function printString(value: any) {
if (isString(value)) {
console.log(value.toUpperCase()); // TypeScript knows value is a string here
} else {
console.log('Not a string');
}
}
În exemplul de mai sus, isString
este un predicat de tip definit de utilizator care ajută TypeScript să înțeleagă că value
este un șir din blocul if
.
Tip Aserțiuni
Aserțiunile de tip îi spun TypeScript să trateze o variabilă ca un anumit tip. Această metodă nu efectuează o verificare de rulare, dar informează compilatorul TypeScript despre tip. De exemplu:
function printLength(value: any) {
console.log((value as string).length); // Assert value is a string
}
În acest exemplu, value as string
îi spune TypeScript să presupună că value
este un șir fără a efectua o verificare de rulare.
Verificări de instanță
Verificările de instanță sunt utilizate pentru a determina dacă un obiect este o instanță a unei anumite clase. Acest lucru este util pentru restrângerea tipurilor atunci când lucrați cu clase:
class Dog {
bark() { console.log('Woof'); }
}
class Cat {
meow() { console.log('Meow'); }
}
function speak(animal: Dog | Cat) {
if (animal instanceof Dog) {
animal.bark(); // TypeScript knows animal is a Dog here
} else {
animal.meow(); // TypeScript knows animal is a Cat here
}
}
În acest exemplu, operatorul instanceof
ajută TypeScript să deducă tipul de animal
pe baza clasei sale.
Folosind operatorul typeof
Operatorul typeof
poate fi folosit pentru a verifica tipurile primitive, cum ar fi string
, number
și boolean
:
function processValue(value: string | number) {
if (typeof value === 'string') {
console.log(value.toUpperCase()); // TypeScript knows value is a string here
} else {
console.log(value.toFixed(2)); // TypeScript knows value is a number here
}
}
Aici, typeof
este folosit pentru a verifica dacă value
este un string
sau un number
și restrânge tipul în consecință.
Folosind operatorul in
Operatorul in
verifică prezența unei proprietăți într-un obiect. Acest lucru este util pentru a distinge tipurile care au proprietăți comune:
interface Bird {
fly: () => void;
}
interface Fish {
swim: () => void;
}
function move(creature: Bird | Fish) {
if ('fly' in creature) {
creature.fly(); // TypeScript knows creature is a Bird here
} else {
creature.swim(); // TypeScript knows creature is a Fish here
}
}
În acest exemplu, operatorul in
ajută TypeScript să determine dacă creature
este un Bird
sau un Fish
pe baza prezenței unei metode.
Concluzie
Protecțiile de tip TypeScript sunt instrumente esențiale pentru a lucra cu tipuri într-un mod flexibil și sigur. Acestea permit verificarea mai precisă a tipului și pot preveni erorile de rulare, asigurându-se că tipul corect este utilizat în diferite scenarii. Înțelegerea și utilizarea eficientă a gardienilor de tip poate duce la un cod TypeScript mai robust și mai ușor de întreținut.