Restrições de Generics em TypeScript
Em uma das lições anteriores, criamos uma função de tipo genérico que deveria exibir o comprimento do parâmetro passado para ela. No entanto, durante a compilação, recebemos um erro, pois nem todos os tipos podem ter comprimento:
function myFunc < T > (data: T): T {
console.log(data.length); // erro
return data;
}
Naquela ocasião, corrigimos a situação alterando
o tipo genérico para o tipo de array genérico.
Mas no TypeScript existe a possibilidade de criar
restrições para generics. Para isso, entre colchetes angulares,
após a variável T, escrevemos
a palavra-chave extends. Após ela,
entre chaves, registramos uma nova
variável str do tipo string.
O restante do código da função permanecerá sem
alterações:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Assim, o tipo genérico herda o tipo
da variável str, especificada entre chaves.
Agora vamos verificar o funcionamento
da nossa função e criar uma variável myStr,
referenciando o tipo str, e definir
seu valor entre chaves:
let myStr: {str: string} = {str: 'abcde'};
Vamos chamar a função myFunc, não
esquecendo de especificar novamente seu tipo e passar
a variável myStr como parâmetro:
myFunc <{str: string}> (myStr);
Com base no exemplo considerado na lição, defina a função para encontrar o comprimento de um array numérico.