Recentemente, assisti a um Tutorial sobre Angular 2 com TypeScript, mas não sabia quando usar uma Interface e quando usar um Modelo para armazenar estruturas de dados.
Exemplo de interface:
export interface IProduct {
ProductNumber: number;
ProductName: string;
ProductDescription: string;
}
Exemplo de modelo:
export class Product {
constructor(
public ProductNumber: number,
public ProductName: string,
public ProductDescription: string
){}
}
Desejo carregar dados JSON de uma URL e vincular à Interface / Modelo. Em algum momento, quero um único objeto de dados, em outro momento, desejo manter e matriz do objeto.
Qual devo usar e por quê?
angular
typescript
I_LIKE_FOO
fonte
fonte
Respostas:
As interfaces são apenas em tempo de compilação. Isso permite apenas que você verifique se os dados esperados recebidos seguem uma estrutura específica. Para isso, você pode transmitir seu conteúdo para esta interface:
Veja estas perguntas:
Você pode fazer algo semelhante com a classe, mas as principais diferenças com a classe são que elas estão presentes no tempo de execução (função construtora) e é possível definir métodos nelas com o processamento. Mas, nesse caso, você precisa instanciar objetos para poder usá-los:
fonte
var data = res.json();
é realmentevar data: any = res.json();
para o compilador, então perdemos todo o tipo de verificaçãodata
. O que seria mais útil aqui seria algo comovar data: ProductDto[] = res.json();
comProductDto
sendo uma interface que modela a estrutura de dados do JSON retornado.Angular style guide says not to use interfaces.Always use classes.
Veja angular.io/guide/styleguide#style-03-03A interface descreve um contrato para uma classe ou um novo tipo . É um elemento puro do TypeScript, portanto, não afeta o Javascript.
Um modelo, e nomeadamente uma classe , é uma função JS real que está sendo usada para gerar novos objetos.
Escolha um modelo, caso contrário, ele ainda será JSON no seu Javascript.
fonte
Como o @ThierryTemplier disse para receber dados do servidor e também transmitir o modelo entre os componentes (para manter a lista intellisense e cometer erros de tempo de design), é bom usar a interface, mas acho que para enviar dados ao servidor (DTOs) é melhor usar a classe para tirar vantagens do DTO de mapeamento automático do modelo.
fonte
Use Classe em vez de Interface, o que eu descobri depois de toda a minha pesquisa.
Por quê? Uma classe sozinha é menos código que uma interface de classe mais. (de qualquer maneira, você pode exigir uma classe para o modelo de dados)
Por quê? Uma classe pode atuar como uma interface (use implementos em vez de estende).
Por quê? Uma classe de interface pode ser um token de pesquisa de provedor na injeção de dependência angular.
do Angular Style Guide
Basicamente, uma classe pode fazer tudo, o que uma interface fará. Portanto, talvez nunca seja necessário usar uma interface .
fonte