Introduktion till TypeScript mappade typer
Mappade typer i TypeScript ger ett sätt att skapa nya typer genom att transformera befintliga. De är ett kraftfullt verktyg för att hantera komplexa typoperationer och säkerställa typsäkerhet i TypeScript-applikationer. Den här artikeln introducerar mappade typer, förklarar deras syntax och ger exempel för att visa hur de används.
Vad är kartlagda typer?
Mappade typer gör det möjligt att skapa nya typer genom att tillämpa en transformation på varje egenskap av en befintlig typ. De används ofta för att modifiera eller utöka typer på ett flexibelt sätt. Den grundläggande syntaxen för en mappad typ är:
type MappedType = {
[K in keyof T]: NewType;
};
I denna syntax:
T
är originaltypen.K
representerar varje nyckel iT
.NewType
är den nya typen som tilldelas varje egenskap.
Grundläggande exempel på mappade typer
Här är ett enkelt exempel på en mappad typ som konverterar alla egenskaper av en given typ till skrivskyddad:
type ReadOnly = {
readonly [K in keyof T]: T[K];
};
type User = {
name: string;
age: number;
};
type ReadOnlyUser = ReadOnly;
I det här exemplet omvandlar den mappade typen ReadOnly
alla egenskaper av typen User
till att vara skrivskyddade, vilket resulterar i en ny typ ReadOnlyUser
där alla egenskaper är oföränderliga.
Kartlagda typer med typtransformationer
Kartlagda typer kan också användas för att transformera typer på mer komplexa sätt. Till exempel en mappad typ som gör alla egenskaper valfria:
type Partial = {
[K in keyof T]?: T[K];
};
type User = {
name: string;
age: number;
};
type PartialUser = Partial;
I det här exemplet gör den mappade typen Partial
alla egenskaper av typen User
valfria, vilket resulterar i en ny typ PartialUser
där varje egenskap är valfri.
Använda mappade typer med villkorliga typer
Kartlagda typer kan kombineras med villkorade typer för mer sofistikerade typoperationer. Till exempel skapa en typ som bara innehåller egenskaper av en viss typ:
type OnlyStrings = {
[K in keyof T]: T[K] extends string ? T[K] : never;
};
type User = {
name: string;
age: number;
email: string;
};
type StringProperties = OnlyStrings;
I det här exemplet filtrerar den mappade typen OnlyStrings
bort egenskaper som inte är av typen string
, vilket resulterar i en ny typ StringProperties
som endast inkluderar strängegenskaper från Användare
typ.
Avancerade mappade typer
Avancerade användningsfall för mappade typer inkluderar att skapa typer som modifierar befintliga typer baserat på olika villkor. Till exempel en mappad typ som lägger till ett suffix till varje egenskapsnamn:
type WithSuffix<T, S extends string> = {
[K in keyof T as `${string & K}${S}`]: T[K];
};
type User = {
name: string;
age: number;
};
type UserWithSuffix = WithSuffix<User, "Prop">;
I det här exemplet lägger den mappade typen WithSuffix
till ett suffix till varje egenskapsnamn av typen User
, vilket resulterar i en ny typ UserWithSuffix
där egenskapsnamnen har det angivna ändelse.
Slutsats
Mappade typer i TypeScript är en mångsidig funktion som gör det möjligt för utvecklare att skapa nya typer genom att omvandla befintliga. Genom att förstå och använda mappade typer kan utvecklare hantera komplexa typtransformationer och säkerställa större typsäkerhet i sin TypeScript-kod. Mappade typer erbjuder kraftfulla funktioner för att förbättra och anpassa typdefinitioner i TypeScript-applikationer.