Defining a Static Method on a Generic Class
Somente propriedades de instâncias e metodos tem um generic type, que pode ser diferente para cada objeto. Metodos estaticos são acessadas pela classe
import {City, Person, Product, Employee} 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)];
let employees = [new Employee("Bob Smith", "Sales"),
new Employee("Alice Jones", "Sales")];
class DataCollection<T> {
protected items: T[] = [];
constructor(initialItems: T[]) {
this.items.push(...initialItems);
}
filter<V extends T>(predicate: (target) => target is V): V[] {
return this.items.filter(item => predicate(item)) as V[];
}
static reverse(items: any[]) {
return items.reverse();
}
}
let mixedData = new DataCollection<Person | Product>([...people, ...products]);
function isProduct(target): target is Product {
return target instanceof Product;
}
let filteredProducts = mixedData.filter<Product>(isProduct);
filteredProducts.forEach(p => console.log(`Product: ${p.name}, ${p.price}`));
let reversedCities: City[] = DataCollection.reverse(cities);
reversedCities.forEach(c => console.log(`City: ${c.name}, ${c.population}`));
o método reverse define um type parameter que especifica o tipo de array que ele processa. Quando o metodo é invocado, isso é feito atraves da classe DataCollection e um argumento de tipo é fornecido após o nome do metodo:
let reversedCities = DataCollection.reverse<City>(cities);
04 December 2025