Przejdź do głównej treści
eLearner.app
Moduł 7 · Lekcja 2 z 214/14 w kursie~15 min
Lekcje modułu (2/2)

Deklaracje i Merging

Pliki deklaracji typów (z rozszerzeniem .d.ts) są używane w TypeScript do opisywania struktury istniejącego kodu JavaScript bez implementowania jakiejkolwiek rzeczywistej logiki. Zawierają one jedynie definicje typów, interfejsów i sygnatur funkcji.

Pliki te są kluczowe, gdy korzystamy z bibliotek zewnętrznych napisanych w czystym JavaScript.


Declaration Merging (Scalanie Deklaracji)

Declaration Merging to zachowanie, w którym kompilator łączy dwie lub więcej osobnych definicji o tej samej nazwie w jedną definicję.

Najczęstszym przypadkiem jest scalanie interfejsów:

TS
interface User {
  name: string;
}

interface User {
  age: number;
}

// Wynikowy interfejs User posiada zarówno właściwość name, jak i age!
const student: User = {
  name: 'Alice',
  age: 23,
};

Jeśli właściwości mają tę samą nazwę, muszą być tego samego typu, w przeciwnym razie TypeScript zgłosi błąd.


Modyfikowanie modułów globalnych i zewnętrznych

Możemy użyć scalania deklaracji (declaration merging) do rozszerzenia interfejsów zdefiniowanych w innych modułach lub w zakresie globalnym.

Na przykład, jeśli chcemy dodać właściwość do globalnego obiektu window w przeglądarce:

TS
declare global {
  interface Window {
    analyticsToken: string;
  }
}

Używając declare global, informujemy TypeScript, że wstawiamy nową sygnaturę do interfejsu Window istniejącego już w zakresie globalnym.


Spróbuj sam

Ćwiczenie 1: Podstawowe scalanie deklaracji

Ćwiczenie#ts.m7.l2.e1
Próby: 0Ładowanie...

W TypeScript interfejsy o tej samej nazwie w tym samym zakresie są automatycznie scalane. Zadeklaruj interfejs User z właściwością name: string, a następnie w drugim bloku zadeklaruj ten sam interfejs User dodając właściwość age: number. Na koniec zadeklaruj stałą user typu User z odpowiednimi wartościami.

Ładowanie edytora...
Pokaż wskazówkę

Zadeklaruj interface User dwukrotnie, wprowadzając odpowiednie właściwości, a następnie przypisz te pola do obiektu user.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie 2: Rozszerzanie globalnego interfejsu Window

Ćwiczenie#ts.m7.l2.e2
Próby: 0Ładowanie...

Wyobraź sobie, że chcesz rozszerzyć globalny interfejs Window, aby dodać do niego niestandardową właściwość o nazwie config typu Record<string, string>. Napisz poprawną deklarację używając declare global, aby scalić nową właściwość z globalnym interfejsem Window.

Ładowanie edytora...
Pokaż wskazówkę

Użyj declare global { interface Window { config: Record<string, string>; } }.

Rozwiązanie dostępne po 3 próbach