O Ty­peS­cript oferece uma série de funções que melhoram sig­ni­fi­ca­ti­va­mente o de­sen­vol­vi­mento de apli­ca­ções web. Este tutorial do Ty­peS­cript fornece uma in­tro­du­ção à linguagem de pro­gra­ma­ção com ex­pli­ca­ções sobre as ca­rac­te­rís­ti­cas, uti­li­za­ções, vantagens e des­van­ta­gens mais im­por­tan­tes.

O que é Ty­peS­cript?

O Ty­peS­cript foi de­sen­vol­vido pela Microsoft e é uma extensão do Ja­vaS­cript muito utilizada no de­sen­vol­vi­mento web. Uma das suas prin­ci­pais ca­rac­te­rís­ti­cas é a tipagem estática. Ao contrário do Ja­vaS­cript, que tem tipagem dinâmica, no Ty­peS­cript é possível declarar tipos de dados para variáveis, funções e pa­râ­me­tros, o que ajuda a detetar erros an­te­ci­pa­da­mente, mesmo antes de executar o código. Isto melhora sig­ni­fi­ca­ti­va­mente a qualidade do código e, ao mesmo tempo, aumenta a sua le­gi­bi­li­dade.

A sintaxe do Ty­peS­cript é muito se­me­lhante à do Ja­vaS­cript, o que facilita a in­te­gra­ção em projetos Ja­vaS­cript exis­ten­tes. Na verdade, o Ty­peS­cript é um su­per­con­junto do Ja­vaS­cript, portanto, qualquer código Ja­vaS­cript válido também é código Ty­peS­cript válido. Isso permite que migre gra­du­al­mente para o Ty­peS­cript e aproveite as vantagens da tipagem estática e outros recursos sem precisar re­es­cre­ver com­ple­ta­mente a sua base de código.

Este é um exemplo simples de Ja­vaS­cript:

function greet(name) {
    return "Hello, " + name;
}
console.log(greet(123)); // Output: "Hello, 123"
ja­vas­cript

Neste código Ja­vaS­cript, a função greet não está limitada a um tipo de dados es­pe­cí­fico para o parâmetro name, pelo que a função pode ser chamada sem erros, mesmo que seja passado um número como argumento.

Em Ty­peS­cript, o código tem a seguinte sintaxe:

function greet(name: string): string {
    return "Hello, " + name;
}
console.log(greet(123)); // Error in TypeScript
ty­pes­cript

Aqui, de­cla­ra­mos ex­pli­ci­ta­mente o parâmetro name como uma string. Se agora chamarmos a função com um número, o Ty­peS­cript exibirá um erro, pois o tipo de dados passado não cor­res­ponde ao tipo de dados esperado.

Este exemplo mostra como o Ty­peS­cript ajuda a detetar erros an­te­ci­pa­da­mente e a aumentar a qualidade do código, evitando o uso de tipos de dados in­cor­re­tos. No entanto, é im­por­tante ter em conta que o Ty­peS­cript é compilado em última instância para Ja­vaS­cript e pode ser executado em qualquer ambiente Ja­vaS­cript, pelo que os be­ne­fí­cios da segurança de tipos só são uti­li­za­dos durante o de­sen­vol­vi­mento.

As apli­ca­ções do Ty­peS­cript

O Ty­peS­cript de­sem­pe­nha um papel fun­da­men­tal em várias apli­ca­ções de de­sen­vol­vi­mento de software, es­pe­ci­al­mente em situações em que a segurança dos tipos e a qualidade do código são decisivas.

Uma área im­por­tante de aplicação do Ty­peS­cript é o de­sen­vol­vi­mento web. Nela, ele garante que o código Ja­vaS­cript escrito seja mais seguro e fácil de manter, o que é uma vantagem em projetos front-end extensos, nos quais a base de código é complexa. No entanto, o Ty­peS­cript também pode ser im­ple­men­tado no lado do servidor (back-end) em apli­ca­ções Node.js para fornecer uma camada adicional de segurança. Em ar­qui­te­tu­ras sem servidor, como AWS Lambda e Azure Functions, o Ty­peS­cript ajuda a minimizar erros e garantir uma boa execução.

O Ty­peS­cript também traz muitos be­ne­fí­cios no âmbito do de­sen­vol­vi­mento mul­ti­pla­ta­forma, pois pode otimizar sig­ni­fi­ca­ti­va­mente o de­sen­vol­vi­mento de apli­ca­ções mul­ti­pla­ta­forma e apli­ca­ções móveis. Fra­meworks como Na­ti­veS­cript e React Native oferecem suporte para Ty­peS­cript na pro­gra­ma­ção de apli­ca­ções móveis para diversas pla­ta­for­mas. No de­sen­vol­vi­mento de jogos, o Ty­peS­cript é utilizado em projetos que utilizam WebGL ou motores de jogos como Phaser ou Babylon.js. A sua segurança ti­po­grá­fica ajuda a melhorar a qualidade e a fa­ci­li­dade de ma­nu­ten­ção dos jogos.

O Ty­peS­cript também é utilizado em projetos de vi­su­a­li­za­ção e análise de dados. Bi­bli­o­te­cas como D3.js oferecem suporte para Ty­peS­cript, per­mi­tindo a criação de painéis e vi­su­a­li­za­ções so­fis­ti­ca­das.

Como se instala o Ty­peS­cript?

Instalar o Ty­peS­cript é muito fácil e basta seguir alguns passos. Se tiver o Node.js instalado no seu com­pu­ta­dor, pode instalar o Ty­peS­cript uti­li­zando npm (Node Package Manager).

Passo 1. Des­car­re­gar o Node.js

Verifique se tem o Node.js instalado no seu com­pu­ta­dor. Se ainda não o tiver, pode des­car­regá-lo e instalá-lo a partir do site oficial.

Passo 2. Instalar o Ty­peS­cript no terminal

Abra a janela de comandos do seu sistema operativo (por exemplo, o sistema de comandos do Windows, o Terminal no macOS ou Linux) e introduza o seguinte comando para instalar o Ty­peS­cript glo­bal­mente.

npm install -g typescript
bash

A opção -g (global) indica que o Ty­peS­cript será instalado em todo o seu sistema, para que você possa usá-lo em qualquer lugar.

Passo 3. Mostrar a versão instalada

Execute este comando para verificar se a ins­ta­la­ção foi realizada cor­re­ta­mente:

tsc -v
bash

Este comando mostra a versão instalada do Ty­peS­cript. Se você vir o número da versão, significa que a ins­ta­la­ção foi realizada cor­re­ta­mente.

Após a ins­ta­la­ção, pode criar ficheiros Ty­peS­cript (com a extensão .ts) e compilá-los com o com­pi­la­dor Ty­peS­cript tsc para gerar ficheiros Ja­vaS­cript.

Passo 4. Criar ficheiros Ty­peS­cript

Crie um ficheiro Ty­peS­cript, por exemplo app.ts, e insira o seu código Ty­peS­cript.

type Person = { name: string, age: number };
const alice: Person = { name: "Alice", age: 30 };
console.log(`Hello, I am ${alice.name} and I am ${alice.age} years old.`);
ty­pes­cript

Passo 5. Compilar ficheiros

Compile o ficheiro Ty­peS­cript in­tro­du­zindo o seguinte comando:

tsc app.ts
bash

Desta forma, compila app.ts num ficheiro Ja­vaS­cript com o nome app.js. Depois, pode executar o ficheiro Ja­vaS­cript.

Ca­rac­te­rís­ti­cas do Ty­peS­cript

O de­sen­vol­vi­mento web tem ex­pe­ri­men­tado um grande avanço nos últimos anos e o Ty­peS­cript surgiu como uma al­ter­na­tiva poderosa ao Ja­vaS­cript. A seguir, resumimos as suas ca­rac­te­rís­ti­cas mais im­por­tan­tes.

Ti­pi­fi­ca­ção estática

A tipagem estática é um aspeto essencial do Ty­peS­cript e refere-se à definição de tipos de dados para variáveis, pa­râ­me­tros, funções e outros elementos do seu código. Ao contrário da tipagem dinâmica em Ja­vaS­cript, onde os tipos de dados são de­ter­mi­na­dos em tempo de execução, no Ty­peS­cript os tipos de dados são de­cla­ra­dos durante o de­sen­vol­vi­mento, antes da execução do código. Portanto, os tipos ajudam a re­co­nhe­cer erros e problemas lógicos an­te­ci­pa­da­mente.

function add(a: number, b: number): number {
    return a + b;
}
const result = add(5, 3); // valid
const result = add(5, "3"); // Type Error
ty­pes­cript

Neste exemplo, utiliza-se a tipagem estática para a função add. Os dois pa­râ­me­tros a e b são de­cla­ra­dos como números (number), e a função retorna um valor do tipo number. Ou seja, se tentar chamar esta função com outros tipos de dados, o Ty­peS­cript detectará essas ten­ta­ti­vas como erros.

Ti­pi­fi­ca­ção opcional

Com a tipagem opcional, é possível atribuir tipos a de­ter­mi­na­das variáveis e pa­râ­me­tros, enquanto outros per­ma­ne­cem sem tipagem explícita.

function sayHello(name: string, age: any): string {
    if (age) {
        return `Hello, ${name}, you are ${age} years old.`;
    } else {
        return `Hello, ${name}.`;
    }
}
ty­pes­cript

A função sayHello é definida com os pa­râ­me­tros name e age. O tipo any indica que o parâmetro age pode aceitar qualquer tipo de dado.

Funções ES6+

O Ty­peS­cript é com­pa­tí­vel com as fun­ci­o­na­li­da­des modernas do Ja­vaS­cript, incluindo ES6 e outras mais recentes, como funções de seta e strings de modelo.

const multiply = (a: number, b: number): number => a * b;
const greeting = (name: string) => `Hello, ${name}!`;
ty­pes­cript

As funções flecha (arrow functions em inglês) permitem uma sintaxe mais curta e concisa.

Or­ga­ni­za­ção do código

Graças aos módulos e espaços de nomes, o Ty­peS­cript oferece uma melhor or­ga­ni­za­ção do código e garante que este seja dividido em partes reu­ti­li­zá­veis.

// Math.ts
export function add(a: number, b: number): number {
    return a + b;
}
// Main.ts
import { add } from './Math';
const result = add(5, 3);
ty­pes­cript

No exemplo anterior, a or­ga­ni­za­ção do código é ilustrada com a ajuda de módulos e o uso de import e export. A função add é definida num módulo separado Math.ts e é importada e instalada noutro módulo Main.ts.

Pro­gra­ma­ção orientada a objetos (POO)

O Ty­peS­cript sim­pli­fica a pro­gra­ma­ção orientada a objetos, per­mi­tindo o uso de classes Ty­peS­cript, in­ter­fa­ces e herança.

class Person {
    constructor(public name: string, public age: number) {}
    greet() {
        console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
    }
}
const person = new Person("Alice", 30);
person.greet();
ty­pes­cript

Este exemplo mostra como usar classes e pro­gra­ma­ção orientada a objetos (OOP) em Ty­peS­cript. A classe Person tem as pro­pri­e­da­des name, age e um método greet para se apre­sen­tar e fornecer in­for­ma­ções sobre si mesma.

Sistema de taxas ampliado

O sistema de tipos do Ty­peS­cript é flexível e extenso. É possível criar tipos e in­ter­fa­ces definidos pelo uti­li­za­dor e até mesmo ampliar tipos exis­ten­tes.

interface Animal {
    name: string;
}
interface Dog extends Animal {
    breed: string;
}
const myDog: Dog = { name: "Buddy", breed: "Labrador" };
ty­pes­cript

A interface Animal define uma pro­pri­e­dade name, enquanto a interface Dog (cão) herda de Animal e adiciona uma pro­pri­e­dade adicional breed (raça). O objeto myDog (o meu cão) tem as ca­rac­te­rís­ti­cas de ambas as in­ter­fa­ces.

Com­pa­ti­bi­li­dade com Ja­vaS­cript

O Ty­peS­cript é com­pa­tí­vel com Ja­vaS­cript e pode ser executado em qualquer ambiente Ja­vaS­cript, o que facilita a sua in­te­gra­ção gradual em projetos Ja­vaS­cript exis­ten­tes.

// JavaScript-Code
function greet(name) {
    return "Hello, " + name;
}
// TypeScript-Code
function greet(name: string): string {
    return "Hello, " + name;
}
ty­pes­cript

O código Ja­vaS­cript (sem tipagem) pode ser utilizado num código Ty­peS­cript (com tipagem) sem qualquer problema.

Vantagens e des­van­ta­gens do Ty­peS­cript

O Ty­peS­cript oferece uma série de vantagens, mas também tem algumas des­van­ta­gens. A seguir, apre­sen­ta­mos um resumo dos ar­gu­men­tos a favor e contra o su­per­con­junto.

Vantagens

O Ty­peS­cript possui um amplo ecos­sis­tema de de­fi­ni­ções de tipos para muitas bi­bli­o­te­cas e fra­meworks Ja­vaS­cript. Isso facilita a in­te­gra­ção de código de terceiros em projetos Ty­peS­cript, o que é muito útil no mundo atual das apli­ca­ções web, que muitas vezes dependem de várias bi­bli­o­te­cas e fra­meworks.

Além da tipagem estática, o Ty­peS­cript oferece uma variedade de recursos de de­sen­vol­vi­mento, incluindo in­ter­fa­ces, classes, módulos e suporte aos padrões atuais do EC­MAS­cript. Esses recursos melhoram a estrutura do código, facilitam a ma­nu­ten­ção e a es­ca­la­bi­li­dade dos projetos e aumentam a pro­du­ti­vi­dade durante o de­sen­vol­vi­mento. O Ty­peS­cript também é com­pa­tí­vel com muitos ambientes de de­sen­vol­vi­mento integrado (IDE), como o Visual Studio Code.

Des­van­ta­gens

O Ty­peS­cript requer um período inicial de apren­di­za­gem, es­pe­ci­al­mente para pro­gra­ma­do­res que só tra­ba­lha­ram com Ja­vaS­cript. O seu código deve ser compilado para Ja­vaS­cript antes de ser executado em na­ve­ga­do­res ou ambientes Node.js, o que adiciona mais uma etapa ao processo de de­sen­vol­vi­mento.

Em projetos menores, o Ty­peS­cript pode parecer ex­ces­si­va­mente complexo, pois os be­ne­fí­cios da segurança de tipos podem não ser tão evidentes. Devido às in­for­ma­ções adi­ci­o­nais sobre tipos e à etapa de com­pi­la­ção, os projetos em Ty­peS­cript podem exigir mais recursos.

Al­ter­na­ti­vas ao Ty­peS­cript

Existem várias lin­gua­gens de pro­gra­ma­ção web como al­ter­na­tiva ao Ty­peS­cript, cuja uti­li­za­ção dependerá das exi­gên­cias do projeto e das pre­fe­rên­cias dos pro­gra­ma­do­res.

  • Flow: é um tipo estático para Ja­vaS­cript de­sen­vol­vido pelo Facebook. Permite adicionar tipos ao código Ja­vaS­cript sem ter que fazer uma mudança completa para Ty­peS­cript e é uma boa opção se quiser integrar gra­du­al­mente a tipagem nos seus projetos Ja­vaS­cript.
  • Dart: é uma linguagem de pro­gra­ma­ção de­sen­vol­vida pelo Google com a qual é possível criar apli­ca­ções web e apli­ca­ções móveis. Oferece segurança ti­po­grá­fica e um bom de­sem­pe­nho e é fre­quen­te­mente utilizada em com­bi­na­ção com a estrutura Flutter para de­sen­vol­ver apli­ca­ções móveis.
  • Pu­reS­cript: é uma linguagem de pro­gra­ma­ção funcional es­tri­ta­mente tipada que inclui uma forte segurança de tipos. Permite in­cor­po­rar bi­bli­o­te­cas Ja­vaS­cript.
  • Elm: é uma linguagem funcional es­tri­ta­mente tipada para de­sen­vol­ver apli­ca­ções web. Promove o padrão da ar­qui­te­tura Elm e possui um alto nível de segurança de tipos.
  • ReasonML (Buc­kleS­cript): é uma linguagem de­sen­vol­vida pelo Facebook e baseada em Ocaml que compila para Ja­vaS­cript. Além disso, fornece segurança de tipos e uma forte in­te­gra­ção com React para o de­sen­vol­vi­mento frontend.
Dica

Se quiser apro­fun­dar estes temas, consulte os artigos funções Ty­peS­cript e matrizes Ty­peS­cript.

Ir para o menu principal