#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
OnInit
que inclui o métodongOnInit
. 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 tipostring
completed
que é do tipoboolean
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