Skip to content

Instantly share code, notes, and snippets.

@pablo-rufat
Last active April 5, 2022 23:10
Show Gist options
  • Save pablo-rufat/0853988781ad67adec4fc4aa6fef5127 to your computer and use it in GitHub Desktop.
Save pablo-rufat/0853988781ad67adec4fc4aa6fef5127 to your computer and use it in GitHub Desktop.
Uso de genericos com restrição de implementação da interface ITrabalho.
interface ITrabalhador {
trabalhar: Function;
}
class Pessoa {
nome: string;
constructor(nome: string) {
this.nome = nome;
}
}
// Classe que extende da classe Pessoa e implementa o metodo trabalhar() da interface ITrabalhador
class Chefe extends Pessoa implements ITrabalhador{
nome: string;
idade: number;
lucro: number;
constructor(nome: string, idade: number, lucro: number) {
super(nome);
this.idade = idade;
this.lucro = lucro;
}
trabalhar() {
console.log('"trabalhar"');
}
}
// Classe que extende da classe Pessoa e implementa o metodo trabalhar() da interface ITrabalhador
class Funcionario extends Pessoa implements ITrabalhador {
nome: string;
idade: number;
salario: number;
constructor(nome: string, idade: number, salario: number) {
super(nome);
this.idade = idade;
this.salario = salario;
}
trabalhar() {
console.log('trabalhar');
}
}
// Os elementos do atributo items tem que ser de uma classe que implemente a interface ITrabalhador
class Collection<T extends ITrabalhador> {
private items: T[] = [];
constructor(items: T[]) {
this.items.push(...items);
}
getItem(index: number): T {
return this.items[index];
}
}
// Podemos instanciar um objeto da classe collection indicando que os items vao ser do tipo Chefe
const chefes: Collection<Chefe> = new Collection<Chefe>([new Chefe("Joao", 1, 100000)]);
const chefe = chefes.getItem(0);
// Podemos ver que temos acesso aos atributos da classe Chefe
console.log(chefe.lucro);
// Podemos instanciar outro objeto da classe collection indicando que os items vao ser do tipo Funcionario
const funcionarios: Collection<Funcionario> = new Collection<Funcionario>([new Funcionario("Miguel", 1, 100)]);
const funcionario = funcionarios.getItem(0);
// Podemos ver que temos acesso aos atributos da classe Funcionario
console.log(funcionario.salario);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment