Curso TypeScript

Interface

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 = { a: 5, b: 'teste' };