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:

typescriptfunction 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:

typescriptfunction 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:

typescriptlet 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:

typescriptmyFunc <{str: string}> (myStr);
Задание 1

Com base no exemplo considerado na lição, defina a função para encontrar o comprimento de um array numérico.