typescript / intermediate
Snippet
Typ-Eingrenzung von unbekannten Daten mit Typ-Prädikaten
Typ-Prädikate ermöglichen es Funktionen, als benutzerdefinierte Type Guards zu agieren. Durch die Angabe von `data is UserProfile` als Rückgabetyp verengt TypeScript den Typ von `payload` in Bedingungsblöcken automatisch, sobald der Guard `true` zurückgibt.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
interface UserProfile {id: string;role: "admin" | "member";}function isUserProfile(data: unknown): data is UserProfile {return (typeof data === "object" &&data !== null &&"id" in data &&typeof (data as Record<string, unknown>).id === "string" &&"role" in data &&((data as Record<string, unknown>).role === "admin" || (data as Record<string, unknown>).role === "member"));}function processPayload(payload: unknown) {if (isUserProfile(payload)) {console.log(`Valid user: ${payload.id} (${payload.role})`);}}
Erklärung
1
function isUserProfile(data: unknown): data is UserProfile {
Definiert einen benutzerdefinierten Type Guard mit dem Typ-Prädikat `data is UserProfile`.
2
typeof data === "object" && data !== null &&
Stellt sicher, dass der Eingabewert ein Objekt ungleich null ist, bevor Eigenschaften geprüft werden.
3
"id" in data && typeof (data as Record<string, unknown>).id === "string" &&
Überprüft, ob die Eigenschaft `id` existiert und vom Typ string ist.
4
if (isUserProfile(payload)) {
Grenzt `payload` innerhalb des Bedingungsblocks von `unknown` auf `UserProfile` ein.