Learn TypeScript Help

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