TypeScript - TypeScript

TypeScript
Logotipo da escrita de tipo 2020.svg
Paradigma Multi-paradigma : funcional , genérico , imperativo , orientado a objetos
Projetado por Microsoft
Desenvolvedor Microsoft
Apareceu pela primeira vez 1 de outubro de 2012 ; 8 anos atrás ( 01/10/2012 )
Versão estável
4.2.4  Edite isso no Wikidata / 9 de abril de 2021 ; há 4 meses ( 9 de abril de 2021 )
Versão de visualização
4.3 Beta  Edite isso no Wikidata / 9 de abril de 2021 ; há 4 meses ( 9 de abril de 2021 )
Disciplina de digitação Pato , gradual , estrutural
Licença Licença Apache 2.0
Extensões de nome de arquivo .ts, .tsx
Local na rede Internet www .typescriptlang .org
Influenciado por
C # , Java , JavaScript
Influenciado
AtScript , AssemblyScript

TypeScript é uma linguagem de programação desenvolvida e mantida pela Microsoft . É um superconjunto sintático estrito de JavaScript e adiciona tipagem estática opcional à linguagem. O TypeScript foi projetado para o desenvolvimento de grandes aplicativos e transcompilações para JavaScript. Como TypeScript é um superconjunto de JavaScript, os programas JavaScript existentes também são programas TypeScript válidos.

Typescript pode ser usado para desenvolver aplicações JavaScript para tanto do lado do cliente e do lado do servidor de execução (como com Node.js ou Deno ). Existem várias opções disponíveis para transcompilação. O TypeScript Checker padrão pode ser usado ou o compilador Babel pode ser chamado para converter TypeScript em JavaScript.

TypeScript oferece suporte a arquivos de definição que podem conter informações de tipo de bibliotecas JavaScript existentes, assim como arquivos de cabeçalho C ++ podem descrever a estrutura de arquivos de objeto existentes . Isso permite que outros programas usem os valores definidos nos arquivos como se fossem entidades TypeScript estaticamente digitadas. Há arquivos de cabeçalho de terceiros para as bibliotecas populares, como jQuery , MongoDB e D3.js . Cabeçalhos TypeScript para os módulos básicos Node.js também estão disponíveis, permitindo o desenvolvimento de programas Node.js dentro do TypeScript.

O próprio compilador TypeScript é escrito em TypeScript e compilado em JavaScript. Ele é licenciado pela Apache License 2.0 . TypeScript está incluído como uma linguagem de programação de primeira classe no Microsoft Visual Studio 2013 Update 2 e posterior, junto com C # e outras linguagens da Microsoft. Uma extensão oficial permite que o Visual Studio 2012 também suporte TypeScript. Anders Hejlsberg , arquiteto-chefe de C # e criador de Delphi e Turbo Pascal , trabalhou no desenvolvimento do TypeScript.

História

O TypeScript foi divulgado pela primeira vez em outubro de 2012 (na versão 0.8), após dois anos de desenvolvimento interno na Microsoft. Logo após o anúncio, Miguel de Icaza elogiou a linguagem em si, mas criticou a falta de suporte a IDE maduro além do Microsoft Visual Studio , que não estava disponível no Linux e OS X naquela época. Em abril de 2021, havia suporte em outros IDEs e editores de texto, incluindo Emacs , Vim , Webstorm , Atom e o próprio Visual Studio Code da Microsoft .

TypeScript 0.9, lançado em 2013, adicionou suporte para genéricos. TypeScript 1.0 foi lançado na conferência de desenvolvedores Build da Microsoft em 2014. O Visual Studio 2013 Update 2 fornece suporte integrado para TypeScript.

Em julho de 2014, a equipe de desenvolvimento anunciou um novo compilador TypeScript, alegando ganhos de desempenho de 5 ×. Simultaneamente, o código-fonte, que estava inicialmente hospedado no CodePlex , foi movido para o GitHub .

Em 22 de setembro de 2016, o TypeScript 2.0 foi lançado; ele introduziu vários recursos, incluindo a capacidade de os programadores opcionalmente impedirem que variáveis ​​recebam nullvalores atribuídos , às vezes referido como o erro de um bilhão de dólares .

TypeScript 3.0 foi lançado em 30 de julho de 2018, trazendo muitas adições de linguagem como tuplas em parâmetros de descanso e expressões de propagação, parâmetros de descanso com tipos de tupla, parâmetros de descanso genéricos e assim por diante.

O TypeScript 4.0 foi lançado em 20 de agosto de 2020. Embora o 4.0 não tenha introduzido nenhuma alteração significativa, ele adicionou recursos de linguagem, como Custom JSX Factories e Variadic Tuple Types.

Projeto

O TypeScript se originou das deficiências do JavaScript para o desenvolvimento de aplicativos de grande escala na Microsoft e entre seus clientes externos. Os desafios de lidar com código JavaScript complexo levaram à demanda por ferramentas personalizadas para facilitar o desenvolvimento de componentes na linguagem.

Os desenvolvedores do TypeScript buscaram uma solução que não quebrasse a compatibilidade com o padrão e seu suporte a plataforma cruzada. Sabendo que a proposta do padrão ECMAScript atual prometia suporte futuro para a programação baseada em classes , o TypeScript foi baseado nessa proposta. Isso levou a um compilador JavaScript com um conjunto de extensões de linguagem sintática, um superconjunto baseado na proposta, que transforma as extensões em JavaScript regular. Nesse sentido, o TypeScript foi uma prévia do que esperar do ECMAScript 2015. Um aspecto único que não está na proposta, mas adicionado ao TypeScript, é a tipagem estática opcional que permite a análise estática de linguagem, o que facilita o suporte de ferramentas e IDE.

Suporte ECMAScript 2015

TypeScript adiciona suporte para recursos como classes, módulos e uma sintaxe de função de seta, conforme definido no padrão ECMAScript 2015.

Recursos

TypeScript é uma extensão de linguagem que adiciona recursos ao ECMAScript 6. Os recursos adicionais incluem:

Os seguintes recursos foram obtidos a partir do ECMAScript 2015:

Sintaticamente, o TypeScript é muito semelhante ao JScript .NET , outra implementação da Microsoft do padrão de linguagem ECMA-262 que adicionou suporte para tipagem estática e recursos clássicos de linguagem orientada a objetos, como classes, herança, interfaces e namespaces.

Compatibilidade com JavaScript

TypeScript é um superconjunto estrito do ECMAScript 2015, que por sua vez é um superconjunto do ECMAScript 5, comumente referido como JavaScript. Como tal, um programa JavaScript também é um programa TypeScript válido e um programa TypeScript pode consumir JavaScript perfeitamente. Por padrão, o compilador tem como alvo o ECMAScript 5, o padrão atual predominante, mas também é capaz de gerar construções usadas no ECMAScript 3 ou 2015.

Com o TypeScript, é possível usar o código JavaScript existente, incorporar bibliotecas JavaScript populares e chamar o código gerado pelo TypeScript a partir de outro JavaScript. As declarações de tipo para essas bibliotecas são fornecidas com o código-fonte.

Anotações de tipo

TypeScript fornece digitação estática por meio de anotações de tipo para habilitar a verificação de tipo em tempo de compilação . Isso é opcional e pode ser ignorado para usar a tipagem dinâmica regular de JavaScript.

function add(left: number, right: number): number {
	return left + right;
}

As anotações para os tipos primitivos são number, booleane string. Typescript também suporta tipos de dados com as seguintes anotações Array, Enums, void.

Tipos de dados recentemente introduzidas são: Tuple, Union, nevere any. Uma matriz com tipos de dados predefinidos em cada índice é Tupletipo. Uma variável que contém mais de um tipo de dados é o Uniontipo. Quando você tem certeza de que algo nunca vai acontecer, você usa o nevertipo. Estruturas de anytipo fraco ou dinâmico são do tipo.

As anotações de tipo podem ser exportadas para um arquivo de declarações separado para disponibilizar as informações de tipo para scripts TypeScript usando tipos já compilados em JavaScript. As anotações podem ser declaradas para uma biblioteca JavaScript existente, como foi feito para Node.js e jQuery .

O compilador TypeScript faz uso da inferência de tipo para inferir tipos quando os tipos não são fornecidos. Por exemplo, o addmétodo no código acima seria inferido como retornando um numbermesmo se nenhuma anotação de tipo de retorno tivesse sido fornecida. Isso se baseia nos tipos estáticos de lefte rightser numbers, e no conhecimento do compilador de que o resultado da adição de dois numbersé sempre a number. No entanto, declarar explicitamente o tipo de retorno permite que o compilador verifique a exatidão.

Se nenhum tipo pode ser inferido devido à falta de declarações, o padrão é o anytipo dinâmico . Um valor do anytipo suporta as mesmas operações que um valor em JavaScript e a verificação de tipo estática mínima é executada para operações em anyvalores.

Arquivos de declaração

Quando um script TypeScript é compilado, há uma opção para gerar um arquivo de declaração (com a extensão .d.ts) que funciona como uma interface para os componentes no JavaScript compilado. No processo, o compilador remove todos os corpos de função e método e preserva apenas as assinaturas dos tipos que são exportados. O arquivo de declaração resultante pode então ser usado para descrever os tipos TypeScript virtuais exportados de uma biblioteca ou módulo JavaScript quando um desenvolvedor terceirizado o consome do TypeScript.

O conceito de arquivos de declaração é análogo ao conceito de arquivo de cabeçalho encontrado em C / C ++ .

declare namespace arithmetics {
    add(left: number, right: number): number;
    subtract(left: number, right: number): number;
    multiply(left: number, right: number): number;
    divide(left: number, right: number): number;
}

Os arquivos de declaração de tipo podem ser escritos à mão para bibliotecas JavaScript existentes, como foi feito para jQuery e Node.js.

Grandes coleções de arquivos de declaração para bibliotecas JavaScript populares são hospedadas no GitHub em DefinitelyTyped .

Aulas

TypeScript oferece suporte a classes ECMAScript 2015 que integram o suporte de anotações de tipo opcional.

class Person {
    private name: string;
    private age: number;
    private salary: number;

    constructor(name: string, age: number, salary: number) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    toString(): string {
        return `${this.name} (${this.age}) (${this.salary})`; // As of version 1.4
    }
}

Genéricos

TypeScript oferece suporte à programação genérica . A seguir está um exemplo da função de identidade .

function id<T>(x: T): T {
    return x;
}

Módulos e namespaces

TypeScript distingue entre módulos e namespaces. Ambos os recursos do TypeScript suportam o encapsulamento de classes, interfaces, funções e variáveis ​​em contêineres. Os namespaces (anteriormente módulos internos) utilizam a expressão de função imediatamente invocada do JavaScript para encapsular o código, enquanto os módulos (anteriormente módulos externos) aproveitam os padrões da biblioteca JavaScript para fazer isso ( AMD ou CommonJS ).

Ferramentas de desenvolvimento

Compilador

O compilador TypeScript, denominado tsc, é escrito em TypeScript . Como resultado, ele pode ser compilado em JavaScript normal e pode ser executado em qualquer mecanismo JavaScript (por exemplo, um navegador). O pacote do compilador vem com um host de script que pode executar o compilador. Ele também está disponível como um pacote Node.js que usa Node.js como um host.

A versão atual do compilador suporta ECMAScript 5 por padrão. Uma opção é permitida para atingir o ECMAScript 2015 para fazer uso de recursos de linguagem exclusivos para essa versão (por exemplo, geradores). As aulas, apesar de fazerem parte do padrão ECMAScript 2015, estão disponíveis em ambos os modos.

Suporte a IDE e editor

  • A Microsoft fornece um plug-in para Visual Studio 2012 e WebMatrix , suporte totalmente integrado no Visual Studio 2013 , Visual Studio 2015 e suporte a editor de texto básico para Emacs e Vim .
  • O Visual Studio Code é um editor de código-fonte de plataforma cruzada (principalmente) de código aberto desenvolvido pela Microsoft com base no Electron . Ele suporta TypeScript, além de várias outras linguagens, e oferece recursos como depuração e conclusão de código inteligente .
  • alm.tools é um IDE de nuvem de código aberto para TypeScript construído usando TypeScript, ReactJS e TypeStyle.
  • JetBrains suporta TypeScript com autocompletar código, refatoração e depuração em seus IDEs construídos na plataforma IntelliJ, como PhpStorm 6, WebStorm 6 e IntelliJ IDEA , bem como seu Visual Studio Add-in e extensão, ReSharper 8.1.
  • O Atom possui um Plugin TypeScript da Basarat com suporte para autocompletar código, navegação, formatação e compilação rápida.
  • O IDE Cloud9 e o Codenvy online suportam TypeScript.
  • Um plugin está disponível para o NetBeans IDE .
  • Um plugin está disponível para o IDE Eclipse (versão Kepler)
  • TypEcs está disponível para Eclipse IDE .
  • O Cross Platform Cloud IDE Codeanywhere oferece suporte a TypeScript.
  • Webclipse Um plugin do Eclipse projetado para desenvolver TypeScript e Angular 2 .
  • IDE Angular Um IDE independente disponível via npm para desenvolver aplicativos TypeScript e Angular 2, com suporte de terminal integrado.
  • Tide - Ambiente de desenvolvimento interativo TypeScript para Emacs .

Integração com ferramentas de automação de compilação

Usando plug-ins , o TypeScript pode ser integrado com ferramentas de automação de compilação , incluindo Grunt (grunt-ts), Apache Maven (Plugin TypeScript Maven), Gulp (gulp-typescript) e Gradle (Plugin TypeScript Gradle).

Ferramentas para fiapos

O TSLint verifica o código TypeScript para conformidade com um conjunto de padrões e diretrizes. ESLint , um linter JavaScript padrão, também forneceu algum suporte para TypeScript por meio de plug-ins da comunidade. No entanto, a incapacidade do ESLint de aproveitar os serviços de linguagem do TypeScript impedia certas formas de linting semântico e análise de todo o programa. No início de 2019, a equipe do TSLint anunciou a suspensão do uso do linter em favor de typescript-eslintum esforço conjunto das equipes do TSLint, ESLint e TypeScript para consolidar o linting sob o guarda-chuva do ESLint para melhorar o desempenho, a unidade da comunidade e a acessibilidade do desenvolvedor. Para usar o TypeScript com ESLint, você precisa adicionar o @typescript-eslint/eslint-plugine @typescript-eslint/parser.

Histórico de lançamento

Número da versão Data de lançamento Mudanças significativas
0,8 1 de outubro de 2012 ( 01/10/2012 )
0.9 18 de junho de 2013 ( 18/06/2013 )
1.0 12 de abril de 2014 ( 12/04/2014 )
1,1 6 de outubro de 2014 ( 06/10/2014 ) melhorias de desempenho
1,3 12 de novembro de 2014 ( 12/11/2014 ) protected modificador, tipos de tupla
1,4 20 de janeiro de 2015 ( 20/01/2015 ) tipos de união , lete constdeclarações, cordas, modelo, tipo guardas, tipo aliases
1,5 20 de julho de 2015 ( 20/07/2015 ) Módulos ES6, namespacepalavra-chave, for..ofsuporte, decoradores
1,6 16 de setembro de 2015 ( 16/09/2015 ) Suporte JSX, tipos de interseção , declarações de tipo local, classes e métodos abstratos , funções de proteção de tipo definidas pelo usuário
1,7 30 de novembro de 2015 ( 30/11/2015 ) asynce awaitsuporte,
1.8 22 de fevereiro de 2016 ( 22/02/2016 ) restrições genéricas, erros de análise de fluxo de controle, tipos de literal de string, allowJs
2.0 22 de setembro de 2016 ( 22/09/2016 ) tipos com reconhecimento de nulo e indefinido, análise de tipo baseada em fluxo de controle, tipos de união discriminados, nevertipo, readonlypalavra-chave, tipo de thisfunções para
2,1 8 de novembro de 2016 ( 2016-11-08 ) keyof e tipos de pesquisa, tipos mapeados, propagação e repouso de objetos,
2,2 22 de fevereiro de 2017 ( 22/02/2017 ) classes combinadas, objecttipo,
2,3 27 de abril de 2017 ( 27-04-2017 ) async iteração, padrões de parâmetros genéricos, opção estrita
2,4 27 de junho de 2017 ( 27/06/2017 ) expressões de importação dinâmica, enums de string, inferência aprimorada para genéricos, contravariância estrita para parâmetros de retorno de chamada
2,5 31 de agosto de 2017 ( 31/08/2017 ) variáveis ​​de cláusula catch opcional
2,6 31 de outubro de 2017 ( 31-10-2017 ) tipos de função estritos
2,7 31 de janeiro de 2018 ( 31/01/2018 ) propriedades com nome constante, tuplas de comprimento fixo
2,8 27 de março de 2018 ( 27/03/2018 ) tipos condicionais, aprimorados keyofcom tipos de interseção
2,9 14 de maio de 2018 ( 14/05/2018 ) suporte para símbolos e literais numéricos em tipos de objetos keyof e mapeados
3,0 30 de julho de 2018 ( 30/07/2018 ) referências de projeto, extraindo e espalhando listas de parâmetros com tuplas
3,1 27 de setembro de 2018 ( 27/09/2018 ) tupla mapeável e tipos de matriz
3,2 30 de novembro de 2018 ( 30/11/2018 ) verificação mais rigorosa de vinculação, chamada e aplicação
3,3 31 de janeiro de 2019 ( 31/01/2019 ) regras relaxadas sobre métodos de tipos de união, compilações incrementais para projetos compostos
3,4 29 de março de 2019 ( 29/03/2019 ) compilações incrementais mais rápidas, inferência de tipo de funções genéricas, modificador somente leitura para matrizes, asserções const, verificação de tipo global this
3,5 29 de maio de 2019 ( 29/05/2019 ) compilações incrementais mais rápidas, omitir tipo de auxiliar, verificações de propriedade em excesso aprimoradas em tipos de união, verificação de tipo de união mais inteligente
3,6 28 de agosto de 2019 ( 28/08/2019 ) Geradores mais rígidos, distribuição de array mais precisa, melhor suporte a Unicode para identificadores
3,7 5 de novembro de 2019 ( 05/11/2019 ) Encadeamento opcional, coalescência nula
3,8 20 de fevereiro de 2020 ( 2020-02-20 ) Importações e exportações somente de tipo, campos privados ECMAScript, espera de nível superior
3,9 12 de maio de 2020 ( 2020-05-12 ) Melhorias na inferência, melhorias na velocidade
4,0 20 de agosto de 2020 ( 2020-08-20 ) Tipos de tupla variável, elementos de tupla rotulados
4,1 19 de novembro de 2020 ( 2020-11-19 ) Tipos literais de modelo, remapeamento de chave em tipos mapeados, tipos condicionais recursivos
4,2 25 de fevereiro de 2021 ( 2021-02-25 ) Preservação de alias de tipo mais inteligente, elementos de descanso inicial / intermediário em tipos de tupla, verificações mais rígidas para o inoperador, abstractconstruir assinaturas
4,3 26 de maio de 2021 Separar os tipos de gravação nas propriedades overridee no --noImplicitOverridesinalizador, aprimoramentos de tipo de string de modelo
4,4 26 de agosto de 2021 Análise de fluxo de controle de condições com aliases e discriminantes, assinaturas de índice de padrão de string de símbolo e modelo

Veja também

Referências

Citações

Fontes

links externos