0Pricing
TypeScript Academy · Lekcja

Ograniczenia generyczne za pomocą extends

Ograniczaj parametry typów do określonych kształtów.

Ograniczenia generyczne za pomocą extends to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 3 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.

Wprowadzenie

Ograniczenia generyczne zawężają zbiór typów, które można przekazać jako argumenty typu. Użyj `extends`, aby wymagać, by T miał określone właściwości lub pasował do określonego kształtu.

Problem bez ograniczeń

Bez ograniczeń TypeScript nie wie, jakie operacje są poprawne dla T, dlatego zezwala tylko na operacje wspólne dla wszystkich typów.
function getLength<T>(val: T): number {
  // return val.length; // Error — T might not have .length
}

Dodawanie ograniczenia

Użyj `T extends Shape`, aby wymagać, by T miał co najmniej właściwości typu Shape.
function getLength<T extends { length: number }>(val: T): number {
  return val.length;
}
getLength('hello');  // OK — string has .length
getLength([1, 2]);   // OK — array has .length
// getLength(42);   // Error — number has no .length

Ograniczanie do interfejsu

Ogranicz T tak, aby implementował określony interfejs.
interface Named { name: string; }
function greet<T extends Named>(person: T): string {
  return 'Hello, ' + person.name;
}

Ograniczenie keyof

Użyj `K extends keyof T`, aby ograniczyć K do kluczy T. Umożliwia to bezpieczny dostęp do właściwości.
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}
const age = getProperty({ name: 'Alice', age: 30 }, 'age'); // number

Ograniczanie do unii

T można ograniczyć do typu unii, zawężając argument typu do określonych wartości.
type Status = 'active' | 'inactive' | 'banned';
function setStatus<T extends Status>(status: T): void {
  console.log('Setting status:', status);
}

Ograniczanie do konstruktora

Ogranicz T tak, aby było klasą (miało konstruktor), dzięki czemu można tworzyć instancje wewnątrz funkcji.
function create<T>(ctor: new () => T): T {
  return new ctor();
}

Wiele ograniczeń za pomocą przecięcia

Ogranicz T tak, aby spełniał wymagania wielu interfejsów, używając przecięcia.
interface Serializable { serialize(): string; }
interface Loggable { log(): void; }
function process<T extends Serializable & Loggable>(item: T): void {
  item.log();
  console.log(item.serialize());
}

Dziedziczenie ograniczeń

Ograniczenia współpracują z dziedziczeniem. Jeśli T rozszerza klasę bazową, można wywoływać wszystkie metody klasy bazowej.
class Animal { breathe() { return 'breathing'; } }
function care<T extends Animal>(a: T): string { return a.breathe(); }

T rozszerza samo siebie (rekurencyjnie)

Ograniczenia mogą odwoływać się do samych siebie w rekurencyjnych strukturach danych.
interface Comparable<T> { compareTo(other: T): number; }
function max<T extends Comparable<T>>(a: T, b: T): T {
  return a.compareTo(b) >= 0 ? a : b;
}

Komunikaty błędów ograniczeń

Gdy argument typu nie spełnia ograniczenia, TypeScript zgłasza jasny błąd wskazujący zarówno argument, jak i ograniczenie.

Szybkie sprawdzenie

Do czego ograniczenie `K extends keyof T` ogranicza K?

Podsumowanie

Używaj `T extends SomeType`, aby ograniczać parametry typów generycznych. Pozwala to wywoływać określone metody T, używać keyof do bezpiecznego dostępu do właściwości i tworzyć narzędzia bezpieczne typowo.

Często zadawane pytania

Czy lekcja „Ograniczenia generyczne za pomocą extends” jest bezpłatna?

Tak — pełny tekst „Ograniczenia generyczne za pomocą extends” 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 „Ograniczenia generyczne za pomocą extends”?

Ograniczaj parametry typów do określonych kształtów. Ć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 3 z 4.

Ile czasu zajmuje lekcja „Ograniczenia generyczne za pomocą extends”?

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. Funkcje generyczne: parametry typów
  2. Generyczne interfejsy i aliasy typów
  3. Ograniczenia generyczne za pomocą extends
  4. Domyślne parametry typów
← Powrót do TypeScript Academy