Cursos / Redes de Computadores / Programação Orientada a Objetos / Aula

arrow_back Aula 12 - Generics e Decorators

Generics e funções

Exemplo 01

No exemplo abaixo, a lista é definida na variável de tipo como string, dessa forma a lista só recebe valores do tipo string; porém se desejarmos receber uma lista de número, basta modificar o tipo da variável de tipo, ficando dessa forma: new Array<number>()

let lista = new Array<string>();
//lista.push(10); erro pois não aceita o tipo number
lista.push('texto');

//console.log(lista[0].substring(0,3));

Exemplo 02

Abaixo, temos uma construção de uma função genérica, observe que a utilização da variável de tipo permite utilizar a função com diversos tipos.

function info<T>(arg: T): T{
    return arg;
}

let i = info<number>(2);
let t = info<string>('texto');

Exemplo 03

No exemplo abaixo, a função genérica imprimirNome imprime o nome de um determinado objeto, porém como garantir que esse objeto passado terá a propriedade nome? Para isso usamos o conceito de restrições. A restrição indica na variável de tipo que ela deve ser compatível com um determinado tipo, para isso utilizamos no exemplo a interface temNome. A restrição indica apenas a compatibilidade entre tipo, ou seja, as classes não precisam implementar a interface.

class Professor{
    constructor(public nome: string){
    }
}

class Aluno{
    constructor(public nome: string){
    }
}

interface temNome{
    nome: string
}

function imprimirNome<T extends temNome>(obj: T){
    console.log(obj.nome)
}

let p = new Professor('Mário');
let a = new Aluno('Lúcia');

imprimirNome(p);
imprimirNome(a);

Versão 5.3 - Todos os Direitos reservados