TypeScript Academy · Lektion

Branding-/opaque-typer för att förhindra sammanblandning av enheter

Förhindra sammanblandning av enheter eller taggar genom att kombinera bastyper med phantom-brandegenskaper. Skapa dem endast via fabriksfunktioner.

Lektion 1 av 38 steg

Branding-/opaque-typer för att förhindra sammanblandning av enheter är en gratis lektion i TypeScript Academy på CoddyKit. Detta är lektion 1 av 3. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för TypeScript Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i TypeScript Academy innehåller totalt 3 lektioner.

Introduktion

Mål: Skilj värden som ser likadana ut åt på typnivå. En vanlig number kan inte skilja meter från sekunder; en brand-markör kan det.

  • Ingen extra kostnad vid körning
  • Säkrare API:er och refaktoreringar
  • Skapa endast via fabriker

Branda primitiva enheter

Brand-markörer håller isär enheter vid kompilering; fel argumentordning leder till ett typkontrollfel.

type Meter = number & { readonly __brand: "meter" }
type Second = number & { readonly __brand: "second" }

function meter(n: number): Meter { return n as Meter }
function second(n: number): Second { return n as Second }

const d = meter(100)
const t = second(9)

function speed(dist: Meter, time: Second) { return (dist as number) / (time as number) }

// speed(t, d)  // compile error: brands do not match

Generisk brand-hjälpfunktion

Använd en generisk Brand-hjälpfunktion i olika domäner: typade ID:n, token, cursors och så vidare.

type Brand<Tag extends string, T> = T & { readonly __brand: Tag }

type UserId = Brand<"UserId", string>
type OrderId = Brand<"OrderId", string>

function userId(x: string): UserId { return x as UserId }
function orderId(x: string): OrderId { return x as OrderId }

function findUser(id: UserId) { /* ... */ }

const u = userId("u_123")
const o = orderId("o_456")
// findUser(o) // error: OrderId not assignable to UserId

Varumärke med unique symbol

Ett varumärke med unique symbol förhindrar namnkonflikter och läckage till globala namnrymder.

declare const MeterSym: unique symbol

type Meter2 = number & { readonly [MeterSym]: "meter" }

function asMeter2(n: number): Meter2 { return n as Meter2 }

const m2 = asMeter2(5)
// const wrong: Meter2 = 5  // discourage raw assignment; prefer factories

Fabriker och validering

Lägg in varumärket i en factory: validera först, märk sedan och använd därefter. Undvik ad hoc-as på anropsställena.

type NonEmptyString = string & { readonly __brand: "NonEmpty" }

function nonEmpty(s: string): NonEmptyString | null {
  return s.trim().length > 0 ? (s as NonEmptyString) : null
}

function makeSlug(s: NonEmptyString) {
  return (s as string).toLowerCase().replace(/\s+/g, "-")
}

const ok = nonEmpty(" Hello ")
if (ok) { makeSlug(ok) }  // safe: validated & branded first

Tips och fallgropar

Bästa praxis:

  • Håll brandnamnen korta och meningsfulla.
  • Exponera fabriker som det enda sättet att skapa brandade värden.
  • Låt inte brand läcka ut i offentliga API-typer om det inte behövs.
  • Brand finns endast på typsystemnivå: ingen kostnad vid körning.

Kontroll av brandning

Snabb kontroll: Vilket mönster förhindrar att enheter och taggar blandas ihop?

Sammanfattning

Sammanfattning: Brandade/opaqua typer skiljer åt värden som ser likadana ut (meter och sekunder, UserId och OrderId). Skapa dem via fabriker, använd dem i API:er och eliminera oavsiktliga sammanblandningar.

Gratis att börja

Lär dig TypeScript med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
101
Lektioner
352

Vanliga frågor

Är lektionen ”Branding-/opaque-typer för att förhindra sammanblandning av enheter” gratis?

Ja – hela texten till ”Branding-/opaque-typer för att förhindra sammanblandning av enheter” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i TypeScript Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i TypeScript Academy innehåller totalt 3 lektioner.

Vad lär jag mig i ”Branding-/opaque-typer för att förhindra sammanblandning av enheter”?

Förhindra sammanblandning av enheter eller taggar genom att kombinera bastyper med phantom-brandegenskaper. Skapa dem endast via fabriksfunktioner. Ni övar på TypeScript Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig TypeScript Academy?

Du behöver inga förkunskaper. Utbildningen i TypeScript Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 3.

Hur lång tid tar lektionen ”Branding-/opaque-typer för att förhindra sammanblandning av enheter”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här TypeScript Academy-lektionen?

Ja. Varje TypeScript Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Branding-/opaque-typer för att förhindra sammanblandning av enheter
  2. Taggade ID:n och mönster för domänmodellering
  3. Domänmodellering – aggregat, invarianta villkor och tjänster
← Tillbaka till TypeScript Academy