Learn TypeScript Help

Creating an Abstract Interface Implementation

Uma classe abstrada pode prover uma implementação parcial de uma interface que pode ser completa pelas subclasses. A classe abstrata tem o mesmo conjunto de opções para lidar com o tipo de parametros como as classes regulares, como mostrado abaixo classes abstradas que passam no interface do generic type argument:

import {City, Person, Product, Employee} from "./dataTypes"; type shapeType = { name: string }; interface Collection<T extends shapeType> { add(...newItems: T[]): void; get(name: string): T; count: number; } abstract class ArrayCollection<T extends shapeType> implements Collection<T> { protected items: T[] = []; add(...newItems: T[]): void { this.items.push(...newItems); } abstract get(searchTerm: string): T; get count(): number { return this.items.length; } } class ProductCollection extends ArrayCollection<Product> { get(searchTerm: string): Product { return this.items.find(item => item.name === name); } } class PersonCollection extends ArrayCollection<Person> { get(searchTerm: string): Person { return this.items.find(item => item.name === name || item.city === name); } } let peopleCollection: Collection<Person> = new PersonCollection(); peopleCollection.add(new Person("Bob Smith", "London"), new Person("Dora Peters", "New York")); let productCollection: Collection<Product> = new ProductCollection(); productCollection.add(new Product("Running Shoes", 100), new Product("Hat", 25)); [peopleCollection, productCollection].forEach(c => console.log(`Size: ${c.count}`));

A classe ArrayCollection<T> é abstrata e provê uma implementação parcial da interface Collection<T>, deixando as subclasses proverem o metodo get

05 December 2025