Ограничения обобщений с помощью extends
Ограничивайте параметры типов определёнными структурами
«Ограничения обобщений с помощью extends» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Добро пожаловать
Проблема без ограничений
function getLength<T>(val: T): number {
// return val.length; // Error — T might not have .length
}Добавление ограничения
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Ограничение интерфейсом
interface Named { name: string; }
function greet<T extends Named>(person: T): string {
return 'Hello, ' + person.name;
}Ограничение keyof
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Расширение объединения
type Status = 'active' | 'inactive' | 'banned';
function setStatus<T extends Status>(status: T): void {
console.log('Setting status:', status);
}Ограничение конструктором
function create<T>(ctor: new () => T): T {
return new ctor();
}Несколько ограничений с пересечением
interface Serializable { serialize(): string; }
interface Loggable { log(): void; }
function process<T extends Serializable & Loggable>(item: T): void {
item.log();
console.log(item.serialize());
}Наследование ограничений
class Animal { breathe() { return 'breathing'; } }
function care<T extends Animal>(a: T): string { return a.breathe(); }T расширяет самого себя (рекурсивное ограничение)
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;
}Сообщения об ошибках ограничений
Быстрая проверка
Итоги
Часто задаваемые вопросы
Урок «Ограничения обобщений с помощью extends» бесплатный?
Да — полный текст урока «Ограничения обобщений с помощью extends» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Ограничения обобщений с помощью extends»?
Ограничивайте параметры типов определёнными структурами Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Ограничения обобщений с помощью extends»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Обобщённые функции: параметры типов
- Обобщённые интерфейсы и псевдонимы типов
- Ограничения обобщений с помощью extends
- Параметры типов по умолчанию