TypeScript-typskydd
Typskydd är en kraftfull funktion i TypeScript som låter utvecklare utföra körtidskontroller för att begränsa typen av en variabel. Detta säkerställer mer exakt typinformation, vilket leder till säkrare och mer förutsägbar kod. Den här artikeln utforskar vilken typ av skydd är och hur man använder dem effektivt.
Vad är typskydd?
Typskydd är uttryck som utför körtidskontroller och tillåter TypeScript att sluta sig till en mer specifik typ för en variabel. De hjälper till att skilja mellan olika typer, särskilt när det handlar om fackföreningstyper. Typskydd kan implementeras med olika tekniker, inklusive:
- Användardefinierade typpredikat
- Typ påståenden
- Instanskontroller
- Använder operatorn
typeof
- Använda
in
operatorn
Användardefinierade typpredikat
Användardefinierade typpredikat är funktioner som returnerar ett booleskt värde och har en speciell returtyp som anger vilken typ av variabel som kontrolleras. Så här skapar och använder du dem:
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');
}
}
I exemplet ovan är isString
ett användardefinierat typpredikat som hjälper TypeScript att förstå att värde
är en sträng inom if
-blocket.
Typ påståenden
Typpåståenden säger till TypeScript att behandla en variabel som en viss typ. Den här metoden utför ingen körtidskontroll utan informerar TypeScript-kompilatorn om typen. Till exempel:
function printLength(value: any) {
console.log((value as string).length); // Assert value is a string
}
I det här exemplet säger värde som sträng
till TypeScript att anta att värde
är en sträng utan att utföra en körtidskontroll.
Instanskontroller
Instanskontroller används för att avgöra om ett objekt är en instans av en viss klass. Detta är användbart för att begränsa typerna när du arbetar med klasser:
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
}
}
I det här exemplet hjälper operatorn instanceof
TypeScript att härleda typen av djur
baserat på dess klass.
Använda typeof
Operator
Operatorn typeof
kan användas för att kontrollera primitiva typer som string
, number
och 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
}
}
Här används typ
för att kontrollera om värde
är en sträng
eller ett nummer
och begränsar typen därefter.
Använda in
Operator
Operatorn in
kontrollerar förekomsten av en egenskap i ett objekt. Detta är användbart för att skilja mellan typer som delar gemensamma egenskaper:
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
}
}
I det här exemplet hjälper operatorn in
TypeScript att avgöra om creature
är en Bird
eller en Fish
baserat på förekomsten av en metod.
Slutsats
TypeScript-typskydd är viktiga verktyg för att arbeta med typer på ett flexibelt och säkert sätt. De möjliggör mer exakt typkontroll och kan förhindra körtidsfel genom att säkerställa att rätt typ används i olika scenarier. Att förstå och använda typskydd effektivt kan leda till mer robust och underhållbar TypeScript-kod.