O que é uma Interface?
São contratos para implementação de classes, estrutura de dados.
O padrão é que todas as propriedades da interface sejam obrigatórias na implementação da interface.
interface IAnimal {
name: string;
type: 'terrestre' | 'aquático';
executarRugido(alturaEmDecibeis: number): void;
}
interface ICanino extends IAnimal {
porte: 'pequeno' | 'medio' | 'grande';
}
interface IFelino extends IAnimal {
visaoNoturna: boolean;
};
const canino: ICanino = {
name: 'Dog',
type: 'terrestre',
porte: 'medio',
executarRugido: (alturaEmDecibeis) => (`${alturaEmDecibeis}dB`)
};
const felino: IFelino = {
name: 'Gato',
type: 'terrestre',
visaoNoturna: true,
executarRugido: (alturaEmDecibeis) => (`${alturaEmDecibeis}dB`)
};
console.log(canino);
console.log(felino);
Propriedade opcional
O caractere "?" indica que a propriedade é opcional.
Deve ser colocado após o nome da propriedade e antes dos dois pontos ":".
Assim, é possível implementar a interface (criar um objeto) sem determinadas propriedades.
Exemplo:
interface IUsuario {
name: string;
email: string;
role?: 'gerente' | 'supervisor' | 'coordenador' | 'funcionario';
}
const usuario: IUsuario = {
name: 'Heviane',
email: 'heviane@gmail.com',
}
console.log(usuario);
Interface = Utility Types
TypeScript fornece tipos de utilitário para facilitar as transformações de tipo comum.
Esses utilitários estão disponíveis globalmente.
Exemplo: Required
Transforma em um tipo que todas as propriedades são obrigatórias.
Oposto de Parcial
interface Props {
a?: number; // "?" torna a propriedade opcional
b?: string; // "?" torna a propriedade opcional
}
const obj: Props = { a: 5 };
const obj2: Required