Escolar Documentos
Profissional Documentos
Cultura Documentos
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Este artigo descreve os recursos e funcionalidades até o TypeScript 3.1.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
códigos mais organizados, aproveitando as ferramentas avançadas que o
uso de uma linguagem de tipo estaticamente fornece.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
de como funciona a herança baseada em classe (como em Java, PHP, C #,
etc.). O guia é atualizado regularmente para fornecer novas informações
sobre as versões mais recentes do TypeScript.
Índice
Instalação e uso
Con guração
Importação e exportação
Açucares de linguagem
Desestruturação
Tipos
Tipos de Objeto
Tipos de Tupla
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Tipos de Função
Funções sobrecarregadas
Tipos Genéricos
Tipos de União
Tipos de Intersecção
Guardas de Tipo
Classes
Enumeráveis
Aliases
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Declarações de Ambiente
Carregador de Plugins
Instalação e uso
A instalação do TypeScript é tão simples quanto a execução npm install
typescript. Uma vez instalado, o compilador TypeScript estará disponível
executando tsc ou executando uma tarefa local para compilar
automaticamente após cada arquivo ser salvo. Se você quiser experimentar
o TypeScript em seu navegador, o TypeScript Playground permite que você
experimente o TypeScript com um editor de código completo, com a
limitação de que os módulos não podem ser usados. A maioria dos
exemplos deste guia pode ser colado diretamente no playground para ver
rapidamente como o TypeScript é compilado em JavaScript com uma fácil
leitura.
Con guração
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
O compilador TypeScript é altamente con gurável, permitindo que o
usuário de na onde os arquivos de origem estão e como eles devem ser
transformados, indo até como podemos con gurar quão restrito o
veri cador de tipos deve ser e se deve permitir arquivos JavaScript. Cada
uma das opções de con guração pode ser passada para o comando tsc, ou
um arquivo tscon g.json pode armazenar as con gurações de um projeto,
de nindo como o compilador deve ser executado toda vez. O tscon g.json
armazena informações sobre vários sinalizadores e con gurações do
compilador, bem como informações de resolução do caminho do módulo.
Uma lista completa de opções do compilador está disponível na
documentação o cial. Um exemplo de tscon g.json do projeto Dojo:
{
"version": "2.1.5",
"compilerOptions": {
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "umd",
"moduleResolution": "node",
"outDir": "_build/",
"removeComments": false,
"sourceMap": true,
"strict": true,
"target": "es5",
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
"lib": ["es2015", "dom"]
},
"include": [
"./src/**/*.ts",
"./tests/**/*.ts",
"./typings/index.d.ts"
]
}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
se que o sinalizador strict seja habilitado para receber todos os benefícios
do TypeScript.
A propriedade lib no tscon g.json pode ser usada para especi car quais
bibliotecas padrão estão disponíveis para o projeto. Os valores aqui são
baseados no tipo de projeto e onde o projeto precisa ser executado. Por
exemplo, um projeto para Web provavelmente precisará acessar o DOM,
portanto, a inclusão de lib: [“dom”] garantirá a existência de document e
métodos como querySelector. Se estiver rodando em um ambiente
ES2016, ou um com os poly lls apropriados, “es2016” também pode ser
incluído. Se o seu projeto especi camente espera que os arrays tenham um
método .include, podemos incluir “es2016.array.include”. Isso permite a
personalização de como o TypeScript pode identi car o seu código,
comparando com o ambiente desejado em tempo de execução e se deve
lançar erros para o código atual, que pode não existir realmente no
ambiente em tempo de execução.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
em um único arquivo e não disponibilizá-los para o projeto inteiro.
Considere o seguinte exemplo:
**/ .
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Observe que, a partir do TypeScript 2.1, o tscon g.json pode herdar de
outros arquivos de con guração, reduzindo a duplicação em aplicativos e
bibliotecas complexos. Isto é feito através da chave extends que tem um
caminho como um valor.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
intenção sobre como essas variáveis se comportarão — o que torna o código
mais fácil de entender.
Importação e exportação
Para começar a falar sobre como escrever o TypeScript, primeiro precisamos
entender como criar e carregar arquivos do TypeScript. Os arquivos
TypeScript usam a extensão de arquivo .ts e, como o AMD e o CommonJS ,
cada arquivo TypeScript representa nominalmente um único módulo. A
importação de módulos no TypeScript segue a API ES Modules (ESM):
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Por padrão, a resolução do caminho de módulos para IDs de módulo
relativo é a mesma no TypeScript que no AMD e no CommonJS, em que a ID
do módulo é resolvida em relação ao diretório que contém o módulo de
referência. IDs de módulo absoluto funcionam de forma ligeiramente
diferente; primeiro, se houver uma declaração de módulo de ambiente
correspondente, seu valor será usado. Caso contrário, o compilador
percorre o sistema de arquivos, a partir do diretório que contém o módulo
de referência, procurando .ts, então .d.ts, em cada diretório pai, até
encontrar uma correspondência.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Ao invés de introduzir um terceiro tipo de resolução de módulos para o
TypesSript 2.0, a equipe resolveu adicionar de nições de con guração para
resolver este problema: baseUrl, paths, e rootDirs.
paths só pode ser usado se baseUrl estiver de nido. Se pelo menos uma
dessas propriedades for de nida, o compilador do TypeScript tentará usá-
las para resolver os nomes dos módulos e, se falhar, recorrerá a uma
estratégia padrão.
Importação de todo um módulo, pode ser feita usando *asterisco ()**, isso
fará com que as exportações do módulo quem disponíveis localmente com
os mesmos nomes: foo, bar, e MyClass. Para usar esses valores em outro
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
módulo, basta utilizar import para acessar o módulo e suas propriedades
exportadas:
foo();
bar + 5; // = 128
new MyClass();
foo();
bar + 5; // = 128
new MyClass();
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
export default class MyClass {}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Para anexar as exportações de um módulo a uma propriedade nomeada,
como quando você atribui propriedades ao objeto exports em AMD ou
CommonJS, podemos fornecer um alias para a importação com asterisco:
foo.foo();
foo.bar;
new foo.MyClass();
Açucares de linguagem
Antes de mergulhar nos recursos de tipagem estática do TypeScript, é
essencial revisar algumas das melhorias gerais feitas nas funções do
TypeScript, já que algumas dessas alterações tornam os recursos do sistema
de tipos mais fáceis de entender.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
O TypeScript inclui quatro melhorias principais em funções: parâmetros
opcionais, valores de argumentos padrão, associar parâmetros
restantes e funções de seta.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
lista de parâmetros, ao invés de usar a abreviação de ponto de interrogação,
fazemos:
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Neste caso, ao chamar publish(‘/foo’, ‘a’, ‘b’, ‘c’), topic uma string ‘/foo’ e
args seria um array [‘a’, ‘b’, ‘c’]. Observe que o uso desse recurso adiciona
um loop extra à sua função que é executada em cada chamada para coletar
argumentos restante no parâmetro nomeado, portanto, se você tem um
código crítico, para melhorar seu desempenho você deve continuar
utilizando diretamente o objeto arguments.
let obj = {
arrow: () => {
console.log(this);
},
regular: function () {
console.log(this);
}
};
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
O TypeScript também inclui notações abreviadas de objetos que reduzem a
quantidade de código necessária para operações comuns com associar
objetos literais:
}
};
Desestruturação
Diversas variáveis podem ser atribuídas diretamente de um array:
let x, y;
[x, y] = [10, 20];
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Podemos encurtar:
Strings de Template
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Tagged Strings de Template
Operador de Exponenciação
downlevelIteration )
Tipos
Sem adicionar nenhuma indicação de tipo, as variáveis no TypeScript são
do tipo any, o que signi ca que elas podem conter qualquer tipo de dados,
assim como o JavaScript. A sintaxe básica para adicionar restrições de tipo
ao código no TypeScript é semelhante a:
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
function toNumber(numberString: string): number {
const num: number = parseFloat(numberString);
return num;
}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Ao escrever uma expressão (chamada de função, operação aritmética, etc.),
você também pode declarar explicitamente o tipo resultante da expressão, o
que é necessário se você estiver chamando uma função em que o TypeScript
não pode descobrir o tipo de retorno automaticamente. Por exemplo:
= <seu-tipo-aqui> ... . Isso pode ser feito em qualquer lugar, desde que o
tipo que está sendo declarado seja compatível com o tipo da expressão; em
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
outras palavras, se o TypeScript soubesse que numberStringSwap
retornava um número, ao tentar a rmar o tipo com uma string, resultaria
em um erro do compilador como Cannot convert number to string , uma
vez que os dois tipos são incompatíveis. Uma sintaxe alternativa para
conversão de tipos usa a palavra-chave as, como mostrado na atribuição
para o valor str acima. Usar as é idêntico ao uso de <...> . No entanto, a
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
O TypeScript também tem suporte para tipos literais de string. Esses são
úteis quando você sabe que o valor de um parâmetro pode corresponder a
uma lista de strings, por exemplo let easing: "ease-in" | "ease-out" |
"ease-in-out"; .
Tipos de Objeto
Além dos sete tipos primitivos, o TypeScript permite que tipos complexos
(como objetos e funções) sejam facilmente de nidos e usados como
restrições de tipo. Assim como objeto literais são a raiz da maioria das
de nições de objeto em JavaScript, o tipo literal de objeto são a maioria das
de nições de tipo de objeto em TypeScript. Em sua forma mais básica,
parece muito semelhante a um objeto literal de JavaScript normal:
let point: {
x: number;
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
y: number;
};
Neste exemplo, a variável point é de nida para aceitar qualquer objeto com
propriedades x e y. Observe que, diferentemente de um objeto literal
JavaScript, o tipo literal de objeto separa os campos usando ponto-e-vírgula,
e não vírgulas.
point = { x: 0, y: 0 };
// OK, mesmas propriedades
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
point = { x: 'zero', y: 0 };
// Erro, tipo da propriedade `x` está errado
point = { x: 0 };
// Erro, faltando propriedade `y`
point = { x: 0, y: 0, z: 0 };
// Erro, atribuição literal deve contar apenas propriedades
declaradas
const otherPoint = { x: 0, y: 0, z: 0 };
point = otherPoint;
// OK, propriedades extras não são relevantes para atribuição não
literal
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
let point: { x: number; y: number; };
let point2: typeof point;
interface Point {
x: number;
y: number;
}
Essa alteração permite que o tipo Point seja usado em vários locais dentro
do código sem precisar rede nir os detalhes do tipo repetidas vezes.
Interfaces também podem estender outras interfaces ou classes usando a
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
palavra-chave extends para compor tipos mais complexos a partir de tipos
simples:
interface Point {
x: number;
y: number;
z?: number;
}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Aqui, ao invés de especi car uma interface separada para um ponto
tridimensional, simplesmente tornamos a propriedade z da interface
opcional; a veri cação de tipo resultante seria assim:
point = { x: 0, y: 0, z: 0 };
// OK, mesmas propriedades
point = { x: 0, y: 0 };
// OK, mesmas propriedades, parâmetro opcional omitido
point = { x: 0, y: 0, z: 'zero' };
// Erro, tipo da propriedade `z` está errado
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
interface Point {
x: number;
y: number;
z?: number;
toGeo(): Point;
}
interface Point {
// ...
toGeo?(): Point;
}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
interface HashMapOfPoints {
[key: string]: Point;
}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
O Typescript 2.7 adiciona a capacidade de ter propriedades de nomes
constantes nos tipos. Isso signi ca que as interfaces podem ser de nidas
usando strings constantes, números ou literais de símbolo.
interface MyInterface {
[Foo]: number;
[Bar]: string;
[Baz]: boolean;
}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Tipos de Tupla
Embora o JavaScript em si não tenha tuplas, o TypeScript possibilita emular
tuplas tipadas usando Arrays. Se você quiser armazenar um ponto como
uma tupa (x, y, z) ao invés de um objeto, isso pode ser feito especi cando
um tipo de tupla em uma variável:
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
No exemplo acima, a função draw pode aceitar valores para x, y e,
opcionalmente z. Os tipos de tuplas têm um comprimento xo a partir do
TypeScript 2.7, mas também contêm a capacidade de marcar um valor
dentro da tupla como opcional.
Tipos de Função
Como as funções em JavaScript são objetos de primeira classe, a sintaxe
literal do tipo de objeto também pode ser usada para especi car que um
objeto deve ser uma função. Para fazer isso, a mesma sintaxe do método
mostrada acima toGeo é usada, mas com o nome do método deixado em
branco:
let printPoint: {
(point: Point): string;
};
Aqui, printPoint é de nido para aceitar uma função que recebe um objeto
de ponto e retorna uma string.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Como as funções são tão comuns em JavaScript, existe uma sintaxe de tipo
para abreviar uma função especí ca no TypeScript, que pode ser usada para
de nir funções com uma única assinatura de chamada:
Observe que usamos a seta ( => ), que vem da função de seta do ES2015,
para de nir o tipo de retorno da função ao invés dos dois pontos. Os dois
pontos ( : ) são usados para de nir o tipo de retorno de um método de nido
dentro de um tipo de objeto literal, interface ou classe, enquanto que as
setas são usadas pelo tipo de função abreviada mostrado aqui. Isso é um
pouco confuso no início, mas ao trabalhar com o TypeScript, você
descobrirá que é fácil saber quando um ou outro deve ser usado. Por
exemplo, no exemplo acima, usar dois pontos pareceria errado porque
resultaria em dois dois pontos diretamente dentro da declaração:
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Agora que conhecemos a sintaxe do tipo de função, voltando à nossa
de nição Point, de nimos toGeo como uma propriedade ao invés de um
método:
interface Point {
x: number;
y: number;
z?: number;
toGeo: () => Point;
}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Como a sintaxe literal do objeto nos permite de nir objetos como funções,
também é possível de nir tipos de função com propriedades ou métodos
estáticos (como a função JavaScript String , que também possui um método
estático String.fromCharCode ):
let Point: {
new (): Point;
fromLinear(point: Point): Point;
fromGeo(point: Point): Point;
};
realmente fazer isso é de nir uma classe que implemente Point e tenha os
métodos estáticos fromLinear e fromGeo; Vamos ver como fazer isso mais
tarde, quando discutirmos class em profundidade.
Funções sobrecarregadas
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
NOTA: Em inglês conhecidos como — overloaded functions, functions overload,
etc
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Uma maneira de escrever a função acima, em que a tipagem é tratada
corretamente, é:
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
deve ter um tipo que englobe todas as opções possíveis. No caso de
numberStringSwap, porque string e number não tem base comum, o tipo
de value deve ser any.
Note que mesmo que nossa função, totalmente de nida, use o tipo any para
value, ao tentar passar outro tipo (como um booleano) para este
parâmetro, fará com que o TypeScript lance um erro, pois somente as
assinaturas sobrecarregadas são usadas para veri cação de tipo. Em um
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
caso em que mais de uma assinatura corresponderia a uma determinada
chamada, a primeira sobrecarga listada no código-fonte vencerá:
numberStringSwap('1234');
let numberStringSwap: {
(value: number, radix?: number): string;
(value: string): number;
};
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Observe que, como estamos de nindo um tipo e não estamos criando uma
declaração de função real, a implementação real de numberStringSwap é
omitida.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Tipos rigorosos para Funções em TS 2.6+
Por padrão, o TypeScript é negligente ao veri car os parâmetros do tipo de
função. Considere o seguinte exemplo:
let f1: (x: Animal) => void = (x: Animal) => x.breath();
let f2: (x: Dog) => void = (x: Dog) => x.bark();
let f3: (x: Cat) => void = (x: Cat) => x.meow();
f1 = f2;
const c = new Cat();
f1(c); // Erro no Runtime
execução se nós passássemos Cat para a função, mesmo que Cat seja um
Animal, ele tentaria chamar .bark , o que os gatos não conseguem fazer. No
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Tipos Genéricos
O TypeScript inclui o conceito de tipos genéricos, que pode ser interpretado
como um tipo que deve incluir ou fazer referência a outro tipo para ser
concluído. Dois tipos genéricos muito comuns que você vai encontrar são
Array e Promise.
Como arrays são o tipo mais comum de tipo genérico, é mais fácil explicar
como criar seus próprios tipos genéricos usando uma interface parecida
com um array como exemplo:
interface Arrayish<T> {
map<U>(callback: (value: T, index: number, array: Arrayish<T>) =>
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
U, thisArg?: any): Array<U>;
}
que o tipo de retorno da função de callback precisa ser do mesmo tipo que o
valor de retorno de map.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
callback que retorna números. Se o callback fosse alterado para retornar
uma string ao invés de um número, o compilador geraria um erro
informando que os tipos não são compatíveis, pois arrayOfCharCodes é
explicitamente tipado e faz uso de um parâmetro de tipo para determinar o
valor retornado pelo callback, garantindo a compatibilidade no compilador.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Na versão 2.3, o Typescript adicionou a capacidade de declarar um tipo
padrão para tipos genéricos. Isso é muito útil para funções em que o tipo de
retorno depende de um parâmetro, mas você deseja que o parâmetro seja
opcional. Por exemplo, se quiséssemos uma função que criasse uma
Arrayish baseada nos argumentos passados mas com padrão para string
quando nenhum argumento fosse passado, antes de 2.3 teríamos que
escrever:
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Tipos de União
O tipo de união é usado para indicar que um parâmetro ou variável pode
conter mais de um tipo. Por exemplo, se você quiser ter uma função como
document.getElementById, mas que também permita que você passe um
elemento, como a função byId do Dojo, você poderia fazer isso usando um
tipo de união:
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Tipos de Intersecção
Os tipos de interseção exigem que o valor atenda ao contrato de todos os
membros do tipos. Por exemplo:
interface Foo {
name: string;
count: number;
}
interface Bar {
name: string;
age: number;
}
interface Foo {
count: string;
}
interface Bar {
count: number;
}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
export type FooBar = Foo & Bar;
/* FooBar.count é do tipo `string & number` */
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
pode ser um chamado Stringify, que pegará um tipo T e transformará cada
propriedade desse tipo em um valor seja string :
type Stringify<T> = {
[P in keyof T]: string;
};
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
setState(this: StoreMixin, newState: Partial<State>): void {
const { properties: { store, id } } = this;
if (id || newState['id']) {
store.patch(assign( { id }, newState))
.then(() => id ? store.get(id) : store.fetch())
.then((state: State) => {
replaceState(this, state);
});
}
else {
throw new Error('Unable to set state without a specified
`id`');
}
}
Com os tipos Mapped, podemos simpli car a sintaxe para expressar isso,
iterando sobre o tipo original usando keyof , como uma forma de criar
rapidamente o novo tipo parcial. Os tipos mapeados também são úteis para
transformar tipos. Por exemplo, transformando um grupo de propriedades
síncronas em instâncias de Promise:
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
O TypeScript 2.8 adiciona a capacidade de adicionar ou remover
modi cadores readonly ou ? nas propriedades mapeadas. Isso é feito
usando + e - para indicar se o modi cador deve ser adicionado ou
removido:
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
type ToPromise<T> = { [K in typeof T]: Promise<T[K]> };
type Point = [ number, number ];
type PromisePoint = ToPromise<Point>;
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
declare function addOrConcat(x: number | string): number | string;
No entanto, temos que digitar muito e pode ser tedioso mudar no futuro.
Aqui entra os tipos condicionais! Usando a sintaxe ternária dos tipos
condicionais acima, podemos simpli car nossa assinatura de função para o
seguinte:
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Esta assinatura de função está usando tipos genéricos, indicando que T será
um number ou um string . Este será o valor para o argumento. Em seguida,
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Point>; // string | Point
type NonNullableExample = NonNullable<string | number | null |
undefined | void>; // string | number
type ReturnTypeExample = ReturnType<() => boolean>; // boolean
class Renderer {}
type InstanceOfExample = InstanceType<typeof Renderer>; // Renderer
Guardas de Tipo
NOTA: Em inglês conhecidos como — type guards
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Utilizando “typeo ” como guarda de tipos
O guarda de tipo typeof irá tipar o resultado utilizando o operador do
JavaScript typeof . Se a execução entrar no bloco condicional, o TypeScript
pode assumir corretamente que o valor é do tipo que está sendo veri cado.
No entanto, se a execução continuar no bloco else , o TypeScript pode
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
O guarda de tipo instanced usará o operador instanceof do JavaScript
para restringir os tipos dentro de uma instrução condicional. Assim como o
uso de typeof acima, se o resultado desse tipo de veri cação for verdadeiro,
o TypeScript pode inferir corretamente que a variável em questão é desse
tipo dentro do bloco condicional.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
variável será restringido para corresponder ao tipo que contém o valor
veri cado.
interface Point {
x: number;
y: number;
}
Classes
Um dos principais recursos do TypeScript que ainda precisamos discutir é a
sintaxe de herança baseada em classes. O sistema de classes no TypeScript
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
usa um modelo de herança única que deve ser familiar a qualquer
programador que tenha trabalhado com qualquer linguagem baseada em
classes. É importante observar que as classes JavaScript são, basicamente,
um açúcar sintático sobre o sistema de herança baseado em protótipo e não
introduzem um novo modelo de herança orientado a objeto ao JavaScript.
class Proxy {
constructor(kwArgs: {}) {
for (let key in kwArgs) {
this[key] = kwArgs[key];
}
}
get(key: string):any {
return this[key];
}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Na maior parte, as classes no Typescript são semelhantes às classes no
ES2015. O método especial constructor representa a função JavaScript
usada como construtor quando compilada de volta ao JavaScript. Se
desejado, esta função pode retornar um valor para usar como a instância,
assim como o JavaScript, mas ao contrário de todos os outros métodos de
uma classe, constructor não pode ter um tipo de retorno de nido; o tipo de
retorno do método construtor é sempre a própria classe.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Onde o TypeScript difere das classes do ES2015 atualmente está no uso de
campos não-método, no entanto, há uma proposta do estágio 3 para
adicionar isso ao JavaScript. Classes em TypeScript pode também de nir as
propriedades como sendo private , protected e/ou static :
pet(): void {
this._happy = true;
}
}
bark(): string {
let noise = this._happy ? 'woof' : 'grr';
if (this._loudBark) {
noise = noise.toUpperCase();
}
return noise;
}
}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Devido a privacidade da propriedade ser uma restrição de tempo de
compilação e não uma restrição de tempo de execução, é uma boa idéia
continuar seguindo as convenções de JavaScript para propriedades private
e pre xar com um sublinhado, caso seu código TypeScript compilado for
consumido por alguém que esteja escrevendo JavaScript puro.
constructor(kwArgs: {}) {
this.age = Math.random() * 20;
this.collarType = 'leather';
this.toys = [];
super(kwArgs);
}
}
// ...
}
MyChimera.prototype.bark = Dog.prototype.bark;
MyChimera.prototype.roar = Lion.prototype.roar;
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Neste exemplo, temos duas classes ( Dog , Lion ) e uma interface
O TypeScript 2.2 fez várias alterações para facilitar o trabalho com mixins e
classes de composição. Ao invés de adicionar uma nova gramática a classes
que posteriormente possam entrar em con ito com a próxima versão do ES,
a equipe do TypeScript obteve esse resultado removendo algumas das
restrições nas classes. Por exemplo, agora é possível estender de um valor
que constrói um tipo de interseção. O modo como as assinaturas dos tipos
de interseção se combinam também mudou.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Enumeráveis
NOTA: Em inglês conhecidos como — enumerables
enum Style {
NONE = 0,
BOLD = 1,
ITALIC = 2,
UNDERLINE = 4,
EMPHASIS = Style.BOLD | Style.ITALIC,
HYPERLINK = Style.BOLD | Style.UNDERLINE
}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
o operador bitwise AND para veri car se um valor está de nido no bitmask.
Como acima, você também pode de nir explicitamente o valor de um
membro de um enum usando a atribuição. Enums que usam operadores
bitwise devem ser especi cados para usar explicitamente valores 2n para
cada item; enums são normalmente valores simples indexados em 0.
enum Color {
Red = "RED",
Green = "GREEN",
Blue = "BLUE"
}
iria resultar para 'BOLD' . As enums inicializadas por string não podem ser
mapeadas inversamente.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
O tipo const enum é o mesmo que um enumerável regular, exceto que o
compilador substitui todas as referências a valores enumeráveis por valores
literais ao invés de gerar código representando as estruturas enumeráveis
no tempo de execução.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
return Promise.resolve(value);
}
Declarações de Ambiente
Para usar o código JavaScript existente com o TypeScript, o compilador
precisa saber quais módulos e variáveis vêm de fora do TypeScript. Para
fazer isso, o TypeScript introduz o conceito de uma declaração de ambiente
— uma declaração especial que fornece informações de tipo sobre APIs que
existem “no ambiente” de execução do aplicativo.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Por exemplo, se você quisesse escrever código no TypeScript que usasse o
jQuery, a função global “jQuery” precisaria ser de nida usando uma
declaração de ambiente. Na verdade, muitas declarações de ambiente para
várias bibliotecas JavaScript, incluindo jQuery, podem ser encontradas no
projeto De nitelyTyped. O jquery.d.ts de De nitelyTyped é assim:
// ...
// ...
}
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
correspondente, assim, essa extensão de arquivo também pode ser útil para
os módulos normais do TypeScript que contêm apenas de nições de
interface.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Quando você está escrevendo um código TypeScript que precisa acessar as
declarações de ambiente, um comentário de referência especial deve ser
adicionado ao topo do módulo que precisa dele:
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Carregador de Plugins
Se você é um usuário AMD, provavelmente estará acostumado a trabalhar
com um carregador de plugins ( text! e a ns). O TypeScript não suporta
import desses tipos de módulos dinâmicos automaticamente, mas possui
um mecanismo para habilitar seu uso.
Existe um atributo name para a diretiva que facilita o uso de plugins AMD:
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
O TypeScript 2.0+ simpli cou bastante isso através da adição de módulos
wildcard. Para suportar carregadores de plugins de módulos no AMD ou
SystemJS, é necessário ser capaz de digitar o módulo, com o entendimento
de que o nome do módulo é variável através do parâmetro que é passado
para o plugin. Por exemplo, isso possibilita suportar o carregamento de
arquivos HTML, JSON e outros recursos com mais exibilidade.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Análise de controle de uxo
A análise de controle de uxo ajuda a detectar e evitar erros comuns. Alguns
exemplos adicionados de recursos de análise incluem: código inacessível,
parâmetros não utilizados, retornos implícitos, fall-throughs de declarações
case , restrição e ampliação de tipos alinhados com a lógica do seu código,
Conclusão
Nosso artigo avançado sobre o TypeScript explora mais sobre como usar o
sistema de classes do TypeScript e também explora alguns recursos
avançados, como símbolos e decoradores.
Se você quiser obter mais detalhes sobre qualquer um dos recursos descritos
neste guia, a Especi cação da linguagem TypeScript é a fonte da linguagem.
O Stack Over ow também é um excelente lugar para discutir sobre o
TypeScript e fazer perguntas, e o Manual do TypeScript também pode
fornecer algumas informações adicionais além do que este guia fornece.
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
empresa consultoria para desenvolver sua próxima aplicação; basta nos
enviar um email para começar!
⭐ Créditos
The De nitive TypeScript Guide, escrito originalmente por Nick Nisi no
blog do SitePen
839 claps
WRITTEN BY
☕🇳🇿 - https://eduardorabelo.me
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
More From Medium
Related reads
Related reads
6: Web App!
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Christian Grewell in applab
234
Oct 16, 2018 · 3 min read
Related reads
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
ideas take center stage - with no ads in your homepage and inbox. Explore you’re at it. Just $5/month. Upgrade
sight. Watch
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD