TypeScript Academy · Lekcja

Bezpieczne typowo tokeny usług

Używaj typowanych tokenów, aby uniknąć błędów rozwiązywania w czasie wykonywania

Lekcja 4 z 413 kroki

Bezpieczne typowo tokeny usług to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 4 z 4. 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 4 lekcji w sumie.

Problem z tokenami stringowymi

Tokeny stringowe, takie jak "Logger", łatwo wpisać z literówką i nie zawierają żadnych informacji o typie. Kontener nie może poinformować, że get("Loggr") jest nieprawidłowe, a typ zwracanej wartości często jest określany jako any.

Symbole jako tokeny

Użycie symboli zamiast ciągów znaków nadaje każdemu tokenowi unikatową tożsamość, która nie może przypadkowo kolidować z innym tokenem. Centralny rejestr pomaga utrzymać porządek.

const TYPES = {
  Logger: Symbol.for("Logger"),
  Mailer: Symbol.for("Mailer"),
} as const;

Mapowanie tokenów na typy

Głębszym celem jest powiązanie każdego tokenu z typem, który zostanie za jego pomocą uzyskany, aby kontener zwracał prawidłowy typ zamiast any. Tworzymy opakowanie tokenu z informacją o typie.

interface Token<T> {
  readonly id: symbol;
  readonly _type?: T; // phantom type marker
}

Tworzenie tokenów z informacją o typie

Funkcja pomocnicza tworzy token, który przechowuje swój typ w polu fantomowym. Pole to nigdy nie przechowuje wartości — służy wyłącznie do przekazywania informacji o typie kompilatorowi.

function token<T>(name: string): Token<T> {
  return { id: Symbol.for(name) };
}
const LoggerToken = token<Logger>("Logger");

Interfejs kontenera z obsługą typów

Określamy typ kontenera tak, aby get wywnioskowało typ uzyskanej wartości na podstawie tokenu. Bez rzutowań i bez any.

interface TypedContainer {
  get<T>(t: Token<T>): T;
  bind<T>(t: Token<T>, impl: () => T): void;
}

Bindowanie z wywnioskowanymi typami

Podczas bindowania typ zwracany przez fabrykę musi odpowiadać typowi tokenu. Niezgodności są wykrywane w czasie kompilacji.

declare const c: TypedContainer;
c.bind(LoggerToken, () => new ConsoleLogger());
// ConsoleLogger must satisfy Logger or this errors.

Rozwiązywanie z pełną informacją o typach

Teraz get zwraca dokładnie typ tokenu. Autouzupełnianie i sprawdzanie typów działają na wyniku bez ręcznego dodawania adnotacji.

const logger = c.get(LoggerToken); // type: Logger
logger.log("typed resolution");

Unikanie błędów podczas wyszukiwania

Ponieważ tokeny są wartościami z określonym typem, literówka odwołuje się do niezdefiniowanej zmiennej, co powoduje błąd kompilacji, zamiast po cichu używać nieprawidłowego ciągu znaków. Cała klasa błędów związanych z kluczami stringowymi znika.

// c.get(LogerToken) -> compile error: LogerToken is not defined

Odpowiednik w InversifyJS

Inversify obsługuje również tokeny będące symbolami, a narzędzia społecznościowe dodają opakowania z obsługą typów. Zasada pozostaje taka sama: należy powiązać token z określonym typem z implementacją i uzyskiwać wartość z właściwym typem.

import { Container } from "inversify";
const TYPES = { Logger: Symbol.for("Logger") };
// container.bind<Logger>(TYPES.Logger).to(ConsoleLogger)

Rejestr tokenów

Centralizacja tokenów w jednym module zapewnia jedno źródło prawdy, dzięki czemu łatwo je znaleźć, zmienić podczas refaktoryzacji i zachować ich spójność w całej bazie kodu.

export const TOKENS = {
  Logger: token<Logger>("Logger"),
  Mailer: token<Mailer>("Mailer"),
};

Podsumowanie korzyści

Tokeny z informacją o typie zapewniają unikatową tożsamość (symbole), bezpieczeństwo w czasie kompilacji (niezgodności są odrzucane), prawidłowe typy uzyskiwanych wartości (bez any) oraz ochronę przed literówkami (błędy niezdefiniowanych zmiennych).

Szybkie sprawdzenie

Szybkie sprawdzenie wiedzy z tej lekcji.

Podsumowanie

Bezpieczne typowo tokeny usług opakowują unikatowy symbol w typ fantomowy, mapując każdy token na typ wartości, którą pozwala uzyskać. get zwraca precyzyjny typ, bindowanie wymusza zgodność implementacji, a literówki stają się błędami kompilacji zamiast niezauważonymi błędami wyszukiwania po ciągu znaków.

Bezpłatny start

Ucz się TypeScript dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
101
Lekcje
352

Często zadawane pytania

Czy lekcja „Bezpieczne typowo tokeny usług” jest bezpłatna?

Tak — pełny tekst „Bezpieczne typowo tokeny usług” 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 4 lekcji w sumie.

Co nauczysz się w „Bezpieczne typowo tokeny usług”?

Używaj typowanych tokenów, aby uniknąć błędów rozwiązywania w czasie wykonywania Ć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 4 z 4.

Ile czasu zajmuje lekcja „Bezpieczne typowo tokeny usług”?

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

  1. Podstawy odwrócenia sterowania
  2. Wstrzykiwanie przez konstruktor
  3. Kontenery DI z InversifyJS
  4. Bezpieczne typowo tokeny usług
← Powrót do TypeScript Academy