Skärningstyper i TypeScript

Skärningstyper i TypeScript

Den här artikeln förklarar skärningstyper i TypeScript.

YouTube Video

Skärningstyper i TypeScript

I TypeScript är skärningstyper ett sätt att kombinera flera typer för att skapa en ny typ.

Vad är skärningstyper?

Skärningstyper låter dig kombinera flera typer för att definiera en ny typ med alla egenskaper från dessa typer. Skärningstyper definieras med symbolen & och kräver alla egenskaper från varje ingående typ.

Exempel:

1type A = { name: string };
2type B = { age: number };
3
4type C = A & B;
5
6const person: C = {
7    name: "John Doe",
8    age: 30
9};

I denna kod, genom att definiera type C = A & B, blir typen C en objekttyp med egenskaperna name (av typen string) och age (av typen number).

Fördelar med skärningstyper

Genom att använda skärningstyper kan du återanvända befintliga typer och definiera mer flexibla och sammansatta typer. Detta förbättrar kodens underhållbarhet och utbyggbarhet. Dessutom kan skärningstyper tillämpa begränsningar från flera olika typer samtidigt, vilket förbättrar typens säkerhet.

Fördelar:

  • Återanvändbarhet: Genom att kombinera flera typer kan du minska redundanta definitioner och återanvända befintliga typer.
  • Typens säkerhet: Skärningstyper förbättrar typekontroll genom att bara tillåta objekt som uppfyller villkor för flera typer.

Användningsområden för skärningstyper

Skärningstyper är mycket användbara när man utökar objekt eller gränssnitt. Speciellt är det användbart när du vill representera objekt med flera egenskaper.

Användningsfall 1: Objekt med flera gränssnitt

 1interface Drivable {
 2    drive(): void;
 3}
 4
 5interface Flyable {
 6    fly(): void;
 7}
 8
 9type Vehicle = Drivable & Flyable;
10
11const car: Vehicle = {
12    drive() {
13        console.log("Driving on the road");
14    },
15    fly() {
16        console.log("Flying in the sky");
17    }
18};
19
20car.drive(); // "Driving on the road"
21car.fly();   // "Flying in the sky"

I detta exempel definieras typen Vehicle som en skärningstyp som kombinerar Drivable och Flyable. Ett objekt av typen Vehicle måste implementera både metoderna drive() och fly().

Användningsfall 2: Kombinera klasser och skärningstyper

Genom att kombinera klasser och skärningstyper är det möjligt att skapa objekt som har egenskaper från flera gränssnitt.

 1interface Person {
 2    name: string;
 3}
 4
 5interface Employee {
 6    employeeId: number;
 7}
 8
 9type PersonEmployee = Person & Employee;
10
11class CompanyWorker implements PersonEmployee {
12    constructor(public name: string, public employeeId: number) {}
13
14    getDetails() {
15        return `${this.name}, Employee ID: ${this.employeeId}`;
16    }
17}
18
19const worker = new CompanyWorker("Alice", 123);
20console.log(worker.getDetails()); // "Alice, Employee ID: 123"

Här använder vi skärningstypen PersonEmployee av Person och Employee för att göra klassen CompanyWorker till att ha egenskaper från båda.

Saker att beakta med skärningstyper

En viktig punkt när du använder skärningstyper är att vara medveten om möjligheten till egenskapskonflikter. Om egenskaper med samma namn har olika typannoteringar mellan olika typer kan ett fel uppstå.

Exempel på försiktighet:

1type A = { id: number };
2type B = { id: string };
3
4type C = A & B;
5
6// Error: Type 'number' and 'string' are not compatible
7const obj: C = {
8    id: 1
9};

I detta exempel konfliktar id-egenskaperna för A och B, vilket orsakar ett fel vid definition av ett objekt med typen C. I sådana fall är det nödvändigt med en designgranskning för att undvika egenskapskonflikter.

Kodexempel med typannoteringar för skärningstyper

Slutligen, här är ett riktigt kodexempel som inkluderar typannoteringar.

Exempel 1: Visa objektets detaljer

 1type ContactInfo = { phone: string; email: string };
 2type Address = { city: string; postalCode: string };
 3
 4type PersonDetails = ContactInfo & Address;
 5
 6const details: PersonDetails = {
 7    phone: "123-4567",
 8    email: "example@mail.com",
 9    city: "New York",
10    postalCode: "10001"
11};
12
13console.log(details);

Exempel 2: Objekt med ytterligare egenskaper

 1interface BasicInfo {
 2    name: string;
 3    age: number;
 4}
 5
 6interface WorkInfo {
 7    company: string;
 8    position: string;
 9}
10
11type FullInfo = BasicInfo & WorkInfo;
12
13const employee: FullInfo = {
14    name: "Bob",
15    age: 28,
16    company: "Tech Corp",
17    position: "Engineer"
18};
19
20console.log(`${employee.name} is a ${employee.position} at ${employee.company}`);

Slutsats

TypeScripts skärningstyper är en kraftfull funktion för att kombinera flera typer till en ny typ. Detta förbättrar kodens återanvändbarhet och säkerhet, vilket möjliggör komplexa typdefinitioner. Genom att effektivt utnyttja designflexibilitet samtidigt som du är försiktig med typkonflikter kan du uppnå robust och mycket läsbar kod.

Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.

YouTube Video