Cursos / Redes de Computadores / Programação Orientada a Objetos / Aula
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));
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');
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