TypeScript — это мощная расширенная версия JavaScript, которая обеспечивает статическую типизацию и позволяет разработчикам писать более надежный и удобный в обслуживании код. Одной из ключевых особенностей TypeScript являются дженерики, которые позволяют создавать повторно используемые компоненты и функции, способные работать с различными типами. Хотя дженерики часто связаны с массивами, в этой статье мы рассмотрим различные методы и примеры кода, демонстрирующие, как дженерики можно использовать с объектами в TypeScript.
Методы работы с универсальными объектами:
- Общие функции.
С помощью дженериков TypeScript вы можете создавать функции, которые работают с универсальными объектами. Вот пример универсальной функции, которая записывает значения объекта:
function logObjectValues<T>(obj: T): void {
Object.values(obj).forEach((value) => {
console.log(value);
});
}
const person = { name: 'John', age: 30 };
logObjectValues(person); // Output: John, 30
- Общие интерфейсы.
Вы можете определить общие интерфейсы для описания объектов с гибкими типами свойств. Вот пример общего интерфейса, представляющего пару ключ-значение:
interface KeyValuePair<K, V> {
key: K;
value: V;
}
const pair: KeyValuePair<string, number> = { key: 'count', value: 10 };
console.log(pair.key); // Output: count
console.log(pair.value); // Output: 10
- Общие классы.
Подобно функциям и интерфейсам, в TypeScript можно также создавать общие классы. Вот пример универсального класса, хранящего массив объектов:
class Container<T> {
private items: T[] = [];
addItem(item: T): void {
this.items.push(item);
}
getItem(index: number): T {
return this.items[index];
}
}
const container = new Container<number>();
container.addItem(1);
container.addItem(2);
console.log(container.getItem(0)); // Output: 1
console.log(container.getItem(1)); // Output: 2
- Условные типы.
TypeScript предоставляет условные типы, которые позволяют нам создавать универсальные типы на основе условий. Вот пример условного типа, который извлекает значения из объекта:
type ExtractValues<T> = T extends { [key: string]: infer V } ? V : never;
const obj = { name: 'Alice', age: 25 };
type ObjectValues = ExtractValues<typeof obj>; // ObjectValues is 'Alice' | 25
В этой статье мы рассмотрели различные методы работы с универсальными объектами в TypeScript. Мы рассмотрели общие функции, интерфейсы, классы и условные типы, приведя примеры кода для каждого метода. Используя дженерики, разработчики могут писать более пригодный для повторного использования и типобезопасный код, повышая удобство сопровождения и масштабируемость своих проектов TypeScript.