Last active
April 5, 2022 23:10
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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