Typescript - sabrinabm94/javascript GitHub Wiki
O que é?
É um superconjunto (superset) de ferramentas para javascript oferecendo recursos nos quais a linguagem não tem nativamente. Por exemplo, permitindo tornar o código do javascript em fortemente tipado.
Trazendo os conceitos de orientação a objetos ao javascript, sendo possível utilizar classes, interfaces, encapsulamento, herança e mais.
Como surgiu?
O TypeScript começou a ser desenvolvido internamente em 2010 pela equipe da Microsoft. O time foi liderado pelo engenheiro de software Anders Hejlsberg, já conhecido pelo desenvolvimento do Delphi e do Turbo Pascal (Borland), além do .NET (Microsoft).
A Microsoft lançou a linguagem em 2012.
Por que utilizar?
Para escrever um código javascript mais organizado e simplificado, também facilita na identificação de erros e aumentar assim a produtividade.
Funcionalidades
Classe
É uma forma de organizar os dados e funcionalidades, como também melhorar a reutilização destes pela instanciação de novas classes. São blueprints para criar objetos.
class parentClass {
// atributos
// construtor
// getter e setters
// outros métodos
}
Herança
Permite uma classe filho herdar propriedades e funcionalidades da classe pai pela declaração do extends, além de permitir a criação de novos dados e funcionalidades nesta.
class childClass extends parentClass {
constructor(nome: string) {
super(nome)
}
print(msg: string = 'I`m the child') {
super.print(msg);
}
}
Encapsulamento
É utilizado para proteger informações sigilosas impedindo acessos indevidos.
Os níveis de acesso das variáveis são:
1 - publico: todas as classes podem acessar esse atributo
2 - protegido: somente classes derivantes da original onde o atributo é declarado pode acessar esse atributo
3 - privado: o acesso a esse atributo pode ser feita somente dentro da mesma classe no qual foi declarado.
Caso tenha algum valor inconsistente no atributo, é muito mais fácil de encontrar a origem sendo que só a classe onde é declarada pode alterar seu conteúdo necessitando chamar a função set deste, facilitando a manutenibilidade.
Aplicar o encapsulamento, são criadas variáveis como privates (private) e o acesso/alteração de seus valores é feito dentro da classe onde é declarada, pelos métodos getters (para retornar valores) e setters (alterar valores).
class parentClass {
private name: string
get name(): string {
return this.name;
}
set name(name: string): void {
this.name = name;
}
}
Classe abstrata
É um tipo de classe que não pode ser instanciada, somente herdada, utilizada em situações bem específicas onde existe herança de classes.
É utilizada em situações que a classe pai não faça sentido ser instanciada, e tenha sido criada somente para ser estendidas por outras classes pela reutilização de código por herança.
Por exemplo, temos a classe conta que tem atributos compartilhados por conta corrente e conta poupança, mas a classe conta nunca será instanciada, pois toda conta será ou poupança ou corrente. Nesse caso a classe conta seria uma classe abstrata que serviria somente de modelo de atributos e funcionalidades herdados para conta corrente e poupança.
abstract class classAbstract {
constructor(public name: string) {}
print(): void {
console.log(name + this.name);
}
}
class childAbstract extends classAbstract {
constructor() {
super('I`m the abstract child class');
}
override print(): void {
console.log('Override print from classObstract');
}
childPrint(): void {
console.log('childPrint function');
}
}
Interface
É onde é especificado um contrato de uma classe, onde é aplicado a tipagem de seus atributos e métodos com nome, retorno, parâmetros e tipos. É usado para fazer a estrutura de subtipos de objetos.
O ideal é toda classe ter uma interface para haver uma boa organização do código.
interface sampleInterface {
name?: string;
id: number
print();
}
class childClass implements sampleInterface {
name?: string = 'child class';
id: number = 0;
print() {
console.log(this.name);
}
}
Modificadores de acesso
As classes podem ter as definições de acesso como:
- público: pode ser acessado por qualquer lugar do sistema
- privado: pode ser acessado somente dentro da classe que foi declarado
- protegido: pode ser acesso somente pela classe que foi declarado e seus tipos derivados
class Person {
constructor(
private age: number = 29,
public name: string = 'Sabrina',
protected dateBirth: string = '06/01/1994'
) {
this.age = age;
this.name = name;
this.dateBirth = dateBirth;
}
personData(): string {
return `${this.name} - ${this.age} - ${this.dateBirth}`;
}
}
const woman: Person = new Person(18, "Lys", "09/03/2003");
console.log(woman.personData());