Tipos de Dados - TypeScript
TypeScript é uma linguagem fortemente tipada, o que significa que cada variável e constante tem um tipo de dado específico. Ao contrário do JavaScript, não é possível alterar dinamicamente o tipo de uma variável após ela ter sido definido.
Em TypeScript, existem os seguintes tipos básicos:
: valor lógico,boolean
outrue
false
: valor numériconumber
: valores inteiros arbitrariamente grandesbigint
: cadeias de caracteresstring
: arraysarray
: tuplastuples
: enumeraçõesEnum
: tipo arbitrárioany
: símbolossymbol
enull
: correspondem aos valores null e undefined do JavaScriptundefined
: representa a ausência de valor e é usado como tipo de retorno para funções que lançam erros ou nunca retornam.never
A maioria desses tipos se relaciona diretamente com os tipos primitivos do JavaScript.
Para definir o tipo de uma variável, usa-se o sinal de dois-pontos seguido do nome do tipo. Veja alguns exemplos de como criar variáveis:
let x: number = 10;
let hello: string = "hello world";
let isValid: boolean = true;
Nesse caso, a expressão let hello: string = "hello world"
hello
string
"hello world"
Caso se tente alterar o tipo posteriormente, como no exemplo abaixo:
let hello: string = "hello world";
hello = 23;
O compilador TypeScript lançará um erro durante a compilação.
Agora vamos explorar os tipos primitivos de dados em TypeScript.
boolean
O tipo boolean
true
false
let isEnabled: boolean = true;
let isAlive: boolean = false;
console.log(isEnabled);
console.log(isAlive);
number
O tipo number
let age: number = 36;
let height: number = 1.68;
TypeScript também suporta várias notações numéricas, como binária, octal, decimal e hexadecimal:
let decimal: number = 6;
let hex: number = 0xf00d; // 61453 em decimal
let binary: number = 0b1010; // 10 em decimal
let octal: number = 0o744; // 484 em decimal
console.log(decimal);
console.log(hex);
console.log(binary);
console.log(octal);
bigint
Para representar números extremamente grandes, TypeScript introduziu o tipo bigint
number
BigInt()
const num1: bigint = BigInt(100);
console.log(num1);
A segunda é adicionando o sufixo n
const num2: bigint = 100n;
console.log(num2);
Vale lembrar que esse tipo faz parte do padrão ES2020, então é necessário configurar o compilador para usar essa versão do ECMAScript no arquivo tsconfig.json
{
"compilerOptions": {
"target": "es2020",
"outFile": "app.js"
}
}
string
O tipo string
let firstName: string = "Tom";
let lastName = 'Johns';
TypeScript também oferece suporte a templates de strings, que permitem a inserção de expressões dentro de cadeias de caracteres usando a sintaxe ${}
``
let firstName: string = "Tom";
let age: number = 28;
let info: string = `Nome: ${firstName}, Idade: ${age}`;
console.log(info); // Nome: Tom, Idade: 28
Templates de strings também permitem a criação de textos em várias linhas:
let sentence: string = `Hello World!
Goodbye World!`;
Inferência de Tipo
Embora seja possível definir explicitamente o tipo de uma variável, TypeScript também pode inferir o tipo com base no valor atribuído:
let hello = "hello world";
hello = 23;
No exemplo acima, o TypeScript inferirá que a variável hello
string
"hello world"
Tipo any
O tipo any
let someVar: any = "hello";
console.log(someVar); // agora someVar é string
someVar = 20;
console.log(someVar); // agora someVar é number
Como estamos usando o tipo any
any
var someArray: any[] = [24, "Tom", false];
Se uma variável é definida sem um valor inicial ou sem um tipo explícito, ela será considerada do tipo any
let x; // tipo any
x = 10;
x = "hello";
O uso de any
Verificação de Tipo
Com o operador typeof
any
let sum: any;
sum = 1200;
sum = "mil e duzentos";
let result: number = sum / 12;
console.log(result); // NaN - não é possível dividir uma string por um número
Para evitar esse tipo de erro, podemos verificar o tipo antes de realizar a operação:
let sum: any;
sum = 1200;
if (typeof sum === "number") {
let result: number = sum / 12;
console.log(result);
} else {
console.log("Operação inválida");
}
O operador typeof
typeof sum
"number"
sum
Os possíveis valores que typeof
"string"
"number"
"bigint"
"boolean"
"symbol"
"undefined"
"object"
"function"