TypeScript

Criada originalmente pela Microsoft, hoje é um projeto open source, o nome da linguagem dá uma dica sobre sua principal finalidade: enfatizar o conceito de tipo.

Em JavaScript o conceito de tipo existe mas ele é implícito para o desenvolvedor, isto é, ele não precisa escrever quais são os tipos envolvidos na sua função ou objeto. Em TypeScript, por sua vez, as definições de tipo fazem parte do código.

A sintaxe de TypeScript é muito parecida com JavaScript e o desenvolvedor tem a sensação de que está programando em uma versão de JavaScript com tipagem estática. Em verdade, a linguagem TypeScript é um superconjunto da linguagem JavaScript. Isso quer dizer que tem tudo que JavaScript tem e adiciona outros conceitos como, por exemplo, o de interface (como o conceito existente em Java).

Dizer que TypeScript é um superconjunto de JavaScript implica em dizer que todo código escrito em JavaScript é também um código válido em TypeScript. Isso traz um grande benefício: o desenvolvedor pode decidir quais partes da sua aplicação ele deseja converter para TypeScript. Nem sempre é viável (tempo, orçamento, etc) reescrever de uma única vez todo o código na nova linguagem.

O compilador TypeScript compila o código e o resultado é um código equivalente em JavaScript. Mesmo que o compilador encontre erros o código JavaScript será gerado pois o papel do compilador é avisar sobre os erros.

Exemplo

Considere o código JavaScript a seguir. Ele define a função media que calcula a média artimética simples de dois números.

Arquivo: programaEmJS.js:

function media(n1, n2) {
   return (n1 + n2) / 2;
}

let num1 = 8;
let num2 = 10;
let resultado = media(num1, num2);
console.log(`A média de ${num1} e ${num2} é ${resultado}`);

Primeira Versão em TypeScript

Uma primeira versão deste programa em TypeScript poderia ser:

Arquivo: programa1EmTS.ts:

function media(n1, n2) {
   return (n1 + n2) / 2;
}

let num1 = 8;
let num2 = 10;
let resultado = media(num1, num2);
console.log(`A média de ${num1} e ${num2} é ${resultado}`);

A extensão padrão do nome do arquivo é .ts. Observe que esta versão é idêntica à versão JavaScript.

Compilando com o comando abaixo será gerado o arquivo programa1EmTS.js cujo conteúdo é idêntico ao arquivo programaEmJS.js.

tsc -t "ES6" programa1EmTS.ts

A opção -t "ES6" faz com que o código JavaScript gerado seja compatível com a especificação ES6 (EcmaScript 2015).

Segunda Versão em TypeScript

Na primeira versão não há nenhum benefício em usar o compilador tsc pois o arquivo é 100% JavaScript. Na segunda versão, mostrada a seguir, utiliza-se anotações TypeScript para indicar que os parâmetros da função media são números e que o resultado também será um número.

Arquivo programa2EmTS.ts:

function media(n1: number, n2: number): number {
  return (n1 + n2) / 2;
}

let num1 = 8;
let num2 = 10;
let resultado = media(num1, num2);
console.log(`A média de ${num1} e ${num2} é ${resultado}`);

Compilando o arquivo programa2EmTS.ts da mesma forma que foi feito na primeira versão resultará no arquivo programa2EmTS.js cujo conteúdo é idêntico aos arquivos programaEmJS.js e programa1EmTS.js.

Terceira Versão em TypeScript

Nesta terceira versão é introduzido um bug: a variável num1 receberá o valor true em vez de 8.

Arquivo programa3EmTS.ts:

function media(n1: number, n2: number): number {
  return (n1 + n2) / 2;
}

let num1 = true;  // aqui tem um bug
let num2 = 10;
let resultado = media(num1, num2);
console.log(`A média de ${num1} e ${num2} é ${resultado}`);

Em JavaScript isso não é considerado um bug porque true é implicitamente convertido para o número 1 e a execução do programa irá mostrar que a média é 5.5 pois (1 + 10) / 2 é 5.5.

O compilador tsc irá gerar o arquivo programa3EmTS.js mas também mostrará a mensagem abaixo alertando para o problema.

programa3EmTS.ts(7,23): error TS2345: Argument of type 'true' is not assignable to parameter of type 'number'.

Muitas outras falhas são detectadas pelo compilador tsc. Por exemplo se a função for invocada com o número errado de argumentos uma mensagem será gerada avisando sobre o problema.

Dica: O projeto TypeScript possui plugins para vários IDEs que compilam o código na medida em que vão sendo escritos. Assim mensagens com a mostrada acima aparecem durante a codificação, agilizando o desenvolvimento.

Leitura Obrigatória
TypeScript site

results matching ""

    No results matching ""