function merge<T extends object, U extends object>(objA: T, objB: U) {
return {...objA, ...objB};
}
const mergedObj = merge({ name: 'Max', hobbies: ['Sports'] }, { age: 30 });
console.log(mergedObj);
function countAndDescribe<T extends Lengthy>(element: T) {
let descriptionText = 'Got no value.';
if (element.length === 1) {
descriptionText = 'Got 1 element';
} else if (element.length > 1) {
descriptionText = 'Got ' + element.length + ' elemets.';
}
return [element, descriptionText];
}
console.log(countAndDescribe(['Sports', 'Cooking']));
keyof 예)
function extractAndConvert<T extends object, U extends keyof T>(obj: T, key: U) {
return 'Value: ' + obj[key];
}
console.log(extractAndConvert({name: 'Max' }, 'name'));
제네릭 클래스
class DataStorage<T extends number | string | boolean> {
private data: T[] = [];
addItem(item: T) {
this.data.push(item);
}
removeItem(item: T) {
this.data.splice(this.data.indexOf(item), 1);
}
getItems() {
return [...this.data];
}
}
const textStorage = new DataStorage<string>();
textStorage.addItem('Max');
textStorage.addItem('Manu');
textStorage.removeItem('Max');
console.log(textStorage.getItems());
const numberStorage = new DataStorage<number>();