Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Outra opção que não é interface?

Em photo.component.ts no export da classe, tem as duas propriedades description e url, daí se lá no método listFromUser, se eu tipo o get como PhotoComponent[ ],

listFromUser(userName: string) {
    return this.http
    .get<PhotoComponent[]>(API + '/flavio/photos');
  }

tenho o auto complete funcionando com as duas propriedades que declarei (description e url).

export class PhotoComponent {

  @Input() description = '';
  @Input() url = '';
}

Minha dúvida surge aí: seria uma opção, ao invés de criar a interface, declarar em PhotoComponent as outras propriedades do JSON?

Se eu fizer isso, tenho acesso no auto complete a todas as propriedades e inclusive com erro em tempo de compilação caso escreva a propriedade com o nome errado.

Qual a diferença dessa abordagem em relação à criação da interface? É uma má prática?

2 respostas
solução!

Funciona nesse caso simples, mas é importante entender que está misturando duas coisas - uma coisa é a definição das propriedades de uma Foto, que cabe à interface. Essa definição pode ser usada e deve ser usada em outros pontos do Projeto, como em um Service de imagens, ou outros componentes que tratem de fotos, como por exemplo uma listagem de fotos. Outra coisa é a definição das propriedades necessárias ao funcionamento do componente. Nesse caso, que é muito simples, coincidiram - mas em componentes apenas um pouquinho mais complexos não é nada difícil, eu diria que até inevitável, que surjam outras propriedades que não dizem respeito à foto, mas ao controle do componente - número de vezes que um botão foi clicado, nome do usuário, ou até mesmo um service onde o componente consulta as fotos. Seria muito estranho o REST que retorna fotos retornar um objeto com essas propriedades, não concorda ? Por isso quanto antes separarmos as responsabilidades de cada um, melhor - evitamos complicações na evolução do sistema.

Entendi Leonardo. Realmente faz todo sentido o uso da interface. Obrigado!

Abraços.