Typy branding/opaque zapobiegające pomyłkom jednostek
Zapobieganie pomyłkom jednostek i tagów przez przecięcie typów bazowych z właściwościami phantom brand; tworzenie wyłącznie za pomocą funkcji fabrykujących
Typy branding/opaque zapobiegające pomyłkom jednostek to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 3 lekcji w sumie.
Wprowadzenie
Cel: Rozdzielanie podobnie wyglądających wartości na poziomie typów. Zwykły number nie odróżnia metrów od sekund, ale może to zrobić znacznik brand.
- Brak narzutu w czasie działania
- Bezpieczniejsze API i refaktoryzacje
- Tworzenie wyłącznie za pomocą fabryk
Brandowanie jednostek prymitywnych
Znaczniki Brand rozdzielają jednostki podczas sprawdzania typów; nieprawidłowa kolejność argumentów powoduje błąd sprawdzania typów.
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 matchGeneryczna funkcja pomocnicza Brand
Generycznej funkcji pomocniczej Brand można używać w różnych domenach: dla typowanych identyfikatorów, tokenów, kursorów itd.
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 UserIdMarka oparta na unique symbol
Marka oparta na unique symbol zapobiega konfliktom nazw i wyciekaniu do globalnych przestrzeni nazw.
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 factoriesFabryki i walidacja
Przekazuj markę wewnątrz fabryki: najpierw waliduj, następnie oznaczaj marką, a na końcu używaj wartości. Unikaj stosowania doraźnego as w miejscach wywołania.
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 firstWskazówki i pułapki
Najlepsze praktyki:
- Niech nazwy marek będą krótkie i znaczące.
- Udostępniaj fabryki jako jedyny sposób uzyskiwania wartości oznaczonych marką.
- Nie ujawniaj marek w typach publicznego API, chyba że jest to konieczne.
- Marki istnieją wyłącznie na poziomie typów, więc nie powodują narzutu w czasie wykonywania.
Sprawdzanie brandowania
Szybkie sprawdzenie: który wzorzec zapobiega pomyleniu jednostek lub znaczników?
Podsumowanie
Podsumowanie: Typy brandowane/nieprzezroczyste rozdzielają podobnie wyglądające wartości (metry i sekundy, UserId i OrderId). Twórz je za pomocą fabryk, używaj ich w API i eliminuj przypadkowe pomyłki.
Często zadawane pytania
Czy lekcja „Typy branding/opaque zapobiegające pomyłkom jednostek” jest bezpłatna?
Tak — pełny tekst „Typy branding/opaque zapobiegające pomyłkom jednostek” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Typy branding/opaque zapobiegające pomyłkom jednostek”?
Zapobieganie pomyłkom jednostek i tagów przez przecięcie typów bazowych z właściwościami phantom brand; tworzenie wyłącznie za pomocą funkcji fabrykujących Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?
Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.
Ile czasu zajmuje lekcja „Typy branding/opaque zapobiegające pomyłkom jednostek”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?
Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Typy branding/opaque zapobiegające pomyłkom jednostek
- Identyfikatory tagowane i wzorce modelowania domeny
- Modelowanie domeny — agregaty, niezmienniki i usługi