TypeScript - Variáveis
Uma variável, por definição, é “um espaço nomeado na memória” que armazena valores. Em outras palavras, ele atua como um contêiner para valores em um programa. As variáveis TypeScript devem seguir as regras de nomenclatura JavaScript -
Os nomes das variáveis podem conter alfabetos e dígitos numéricos.
Eles não podem conter espaços e caracteres especiais, exceto o sublinhado (_) e o cifrão ($).
Os nomes das variáveis não podem começar com um dígito.
Uma variável deve ser declarada antes de ser usada. Use ovar palavra-chave para declarar variáveis.
Declaração de variável em TypeScript
A sintaxe de tipo para declarar uma variável no TypeScript é incluir dois pontos (:) após o nome da variável, seguido por seu tipo. Assim como no JavaScript, usamos ovar palavra-chave para declarar uma variável.
Quando você declara uma variável, você tem quatro opções -
Declare seu tipo e valor em uma instrução.
Declare seu tipo, mas nenhum valor. Nesse caso, a variável será definida como indefinida.
Declare seu valor, mas nenhum tipo. O tipo de variável será definido para o tipo de dados do valor atribuído.
Não declare nem valor nem tipo. Nesse caso, o tipo de dados da variável será qualquer e será inicializado como indefinido.
A tabela a seguir ilustra a sintaxe válida para declaração de variável conforme discutido acima -
S.No. | Sintaxe e descrição da declaração de variável |
---|---|
1 | var name:string = ”mary” A variável armazena um valor do tipo string |
2 | var name:string; A variável é uma variável de string. O valor da variável é definido como indefinido por padrão |
3 - | var name = ”mary” O tipo da variável é inferido do tipo de dados do valor. Aqui, a variável é do tipo string |
4 | var name; O tipo de dados da variável é qualquer. Seu valor é definido como indefinido por padrão. |
Exemplo: Variáveis em TypeScript
var name:string = "John";
var score1:number = 50;
var score2:number = 42.50
var sum = score1 + score2
console.log("name"+name)
console.log("first score: "+score1)
console.log("second score: "+score2)
console.log("sum of the scores: "+sum)
Na compilação, ele irá gerar o seguinte código JavaScript.
//Generated by typescript 1.8.10
var name = "John";
var score1 = 50;
var score2 = 42.50;
var sum = score1 + score2;
console.log("name" + name);
console.log("first score: " + score1);
console.log("second score : " + score2);
console.log("sum of the scores: " + sum);
O resultado do programa acima é dado abaixo -
name:John
first score:50
second score:42.50
sum of the scores:92.50
O compilador TypeScript gerará erros, se tentarmos atribuir um valor a uma variável que não seja do mesmo tipo. Portanto, o TypeScript segue o Strong Typing. A sintaxe de tipagem forte garante que os tipos especificados em ambos os lados do operador de atribuição (=) sejam os mesmos. É por isso que o código a seguir resultará em um erro de compilação -
var num:number = "hello" // will result in a compilation error
Asserção de tipo em TypeScript
O TypeScript permite alterar uma variável de um tipo para outro. O TypeScript se refere a esse processo como Asserção de Tipo . A sintaxe é colocar o tipo de destino entre <> símbolos e colocá-lo na frente da variável ou expressão. O exemplo a seguir explica este conceito -
Exemplo
var str = '1'
var str2:number = <number> <any> str //str is now of type number
console.log(typeof(str2))
Se você passar o ponteiro do mouse sobre a instrução de asserção de tipo no Visual Studio Code, ele exibirá a alteração no tipo de dados da variável. Basicamente, permite que a afirmação do tipo S para T seja bem-sucedida se S for um subtipo de T ou T for um subtipo de S.
A razão pela qual não é chamado de "conversão de tipo" é que a conversão geralmente implica algum tipo de suporte de tempo de execução, enquanto "asserções de tipo" são puramente uma construção de tempo de compilação e uma maneira de fornecer dicas para o compilador sobre como você deseja que seu código ser analisado.
Na compilação, ele irá gerar o seguinte código JavaScript.
"use strict";
var str = '1';
var str2 = str; //str is now of type number
console.log(typeof (str2));
Ele produzirá a seguinte saída -
string
Digitação inferida em TypeScript
Dado o fato de que o Typescript é fortemente tipado, esse recurso é opcional. O TypeScript também incentiva a digitação dinâmica de variáveis. Isso significa que o TypeScript incentiva a declaração de uma variável sem um tipo. Nesses casos, o compilador determinará o tipo da variável com base no valor atribuído a ela. O TypeScript encontrará o primeiro uso da variável dentro do código, determinará o tipo para o qual foi inicialmente definido e, em seguida, assumirá o mesmo tipo para essa variável no restante do seu bloco de código.
O mesmo é explicado no seguinte snippet de código -
Exemplo: digitação inferida
var num = 2; // data type inferred as number
console.log("value of num "+num);
num = "12";
console.log(num);
No snippet de código acima -
O código declara uma variável e define seu valor como 2. Observe que a declaração da variável não especifica o tipo de dados. Assim, o programa usa a tipagem inferida para determinar o tipo de dados da variável, ou seja, ele atribui o tipo do primeiro valor para o qual a variável é definida. Nesse caso,num é definido como o número do tipo.
Quando o código tenta definir o valor da variável como string. O compilador gera um erro porque o tipo da variável já está definido como número.
Ele produzirá a seguinte saída -
error TS2011: Cannot convert 'string' to 'number'.
Escopo da variável TypeScript
O escopo de uma variável especifica onde a variável é definida. A disponibilidade de uma variável dentro de um programa é determinada por seu escopo. As variáveis TypeScript podem ser dos seguintes escopos -
Global Scope- As variáveis globais são declaradas fora das construções de programação. Essas variáveis podem ser acessadas de qualquer lugar em seu código.
Class Scope - Essas variáveis também são chamadas fields. Os campos ou variáveis de classe são declarados dentro da classe, mas fora dos métodos. Essas variáveis podem ser acessadas usando o objeto da classe. Os campos também podem ser estáticos. Os campos estáticos podem ser acessados usando o nome da classe.
Local Scope - Variáveis locais, como o nome sugere, são declaradas dentro das construções como métodos, loops, etc. Variáveis locais são acessíveis apenas dentro da construção onde são declaradas.
O exemplo a seguir ilustra escopos de variáveis no TypeScript.
Exemplo: Escopo Variável
var global_num = 12 //global variable
class Numbers {
num_val = 13; //class variable
static sval = 10; //static field
storeNum():void {
var local_num = 14; //local variable
}
}
console.log("Global num: "+global_num)
console.log(Numbers.sval) //static variable
var obj = new Numbers();
console.log("Global num: "+obj.num_val)
Na transpilação, o seguinte código JavaScript é gerado -
var global_num = 12; //global variable
var Numbers = (function () {
function Numbers() {
this.num_val = 13; //class variable
}
Numbers.prototype.storeNum = function () {
var local_num = 14; //local variable
};
Numbers.sval = 10; //static field
return Numbers;
}());
console.log("Global num: " + global_num);
console.log(Numbers.sval); //static variable
var obj = new Numbers();
console.log("Global num: " + obj.num_val);
Ele produzirá a seguinte saída -
Global num: 12
10
Global num: 13
Se você tentar acessar a variável local fora do método, ocorrerá um erro de compilação.
error TS2095: Could not find symbol 'local_num'.