#11: ⛓ Interface

Queremos usar as habilidades do TypeScript para saber que tipo de objeto passamos como um item para o componente todo-item. Iremos ter certeza de que o item é do tipo certo. Mas o seu tipo não é uma simples string, número ou booleano. Vamos definir o tipo do item usando uma interface.

Já vimos uma interface fornecida pelo Angular: a interface OnInitque inclui o método ngOnInit. Cada classe que implementa essa interface deve definir esse método. Caso contrário, obteremos um erro durante o tempo de compilação.

Interfaces existem apenas no TypeScript e são removidas quando o código é compilado para JavaScript. Em JavaScript, não podemos impor a segurança do tipo.

Crie uma interface TodoItem em uma nova pasta chamada interfaces com o Angular CLI:

ng g i interfaces/todo-item

i é a contração para... você adivinhou - interface. Adicionando um caminho faz com que o Angular CLI gere as pastas que você indicou, se elas ainda não existirem.

Abra o arquivo recém criado src/app/interfaces/todo-item.ts:

export interface TodoItem {
}

Agora, podemos definir que propriedades e/ou métodos cada objeto do tipo TodoItem deve ter. Neste ponto iremos adicionar dois membros:

  • title que deve ser do tipo string

  • completed que é do tipo boolean e é um membro opcional

export interface TodoItem {
  title: string;
  completed?: boolean;
}

Vamos definir o item @Input para ser do tipo que criamos. Isso vai permitir que a IDE nos sugira membros disponíveis quando usarmos o item na classe e no modelo do componente.

export class TodoItemComponent implements OnInit {
  @Input() item: TodoItem;

Você vai precisar importar a interface nesse arquivo.

import { TodoItem } from '../interfaces/todo-item';

Agora, vamos definir a lista de itens de tarefas para conter os objetos do tipo TodoItem

export class AppComponent {
title = 'app';
todoList: TodoItem[] = [
  {title: 'install NodeJS'},
  {title: 'install Angular CLI'},
  {title: 'create new app'},
  {title: 'serve app'},
  {title: 'develop app'},
  {title: 'deploy app'},
];

Novamente, será preciso importar a interface para esse arquivo.

import { TodoItem } from './interfaces/todo-item';

Agora tente excluir o título (title) de um dos objetos na lista. O que acontece?

Last updated