Questão nº 33
Questão de Engenharia de Software, DevOps e Ciência de Dados · FCC MPEPE 2018 (nº 33)
Considere o fragmento de código TypeScript abaixo.
```
interface CriaArrayString {
[indice: number]: string;
}
var nomes: CriaArrayString;
nomes = ["Ana", "Pedro", "Mariana"];
document.body.innerHTML = nomes[1];
```
Ao executar esse código
- Aocorrerá um erro na linha que contém o comando `[indice: number]: string;`
- Bserá exibido na tela o nome Pedro. (alternativa correta)
- Cocorrerá um erro na linha que contém o comando `var nomes: CriaArrayString;`
- Dserá exibido na tela o nome Ana.
- Eocorrerá um erro na linha que contém o comando `document.body.innerHTML = nomes[1];`
Resposta comentada
Gabarito Alternativa B
Uma interface com assinatura de índice em TypeScript define um tipo para objetos que podem ser acessados como arrays (usando números como índices) ou como dicionários (usando strings como chaves), garantindo que os valores correspondam a um tipo específico.
A) Incorreta: A sintaxe `[indice: number]: string;` é uma forma válida de definir uma assinatura de índice em uma interface TypeScript, indicando que qualquer propriedade acessada por um número (`indice: number`) deve ter um valor do tipo `string`.
(B) Correta: O código declara `nomes` como um tipo que aceita índices numéricos retornando strings. A atribuição `nomes = ["Ana", "Pedro", "Mariana"];` é válida, pois um array de strings se encaixa perfeitamente nessa descrição. Em arrays, o índice `1` corresponde ao segundo elemento, que é "Pedro". O comando `document.body.innerHTML = nomes[1];` irá, portanto, exibir "Pedro" na tela.
C) Incorreta: A declaração `var nomes: CriaArrayString;` é uma declaração de variável TypeScript padrão, associando a variável `nomes` ao tipo definido pela interface `CriaArrayString`. Não há erro de sintaxe ou tipo aqui.
D) Incorreta: "Ana" está na posição de índice `0` do array, não na posição `1`.
E) Incorreta: Acessar `nomes[1]` é uma operação válida para um array (ou tipo array-like) e o resultado (uma string) pode ser atribuído ao `document.body.innerHTML` sem causar um erro de execução no contexto de um navegador. Armadilha: A complexidade da interface `CriaArrayString` pode levar o aluno a pensar que o acesso `nomes[1]` ou a atribuição `nomes = [...]` não seria compatível, mas na verdade a interface descreve exatamente como um array de strings funciona.
Fonte: FCC MPEPE 2018 Analista Ministerial - Área Informática (Caderno Tipo 1). Reproduzida para fins de estudo.