Defining Multiple Type Parameters
Podemos definir mais de um tipo na parametrização das classes genericas, ou seja, definirmos além do T
A definição segue a mesma lógica então basta definirmos uma virgula e incluir o parametro que queremos:
class DataCollection<T extends { name: string }, U>
Código completo:
import {City, Person, Product} from "./dataTypes";
let people = [new Person("Bob Smith", "London"),
new Person("Dora Peters", "New York")];
let products = [new Product("Running Shoes", 100), new Product("Hat", 25)];
let cities = [new City("London", 8136000), new City("Paris", 2141000)];
class DataCollection<T extends { name: string }, U> {
private items: T[] = [];
constructor(initialItems: T[]) {
this.items.push(...initialItems);
}
collate(targetData: U[], itemProp: string, targetProp: string): (T & U)[] {
let results = [];
this.items.forEach(item => {
let match = targetData.find(d => d[targetProp] === item[itemProp]);
if (match !== undefined) {
results.push({...match, ...item});
}
});
return results;
}
}
let peopleData = new DataCollection<Person, City>(people);
let collatedData = peopleData.collate(cities, "city", "name");
collatedData.forEach(c => console.log(`${c.name}, ${c.city}, ${c.population}`));
01 December 2025