Skip to content

Commit 6544f30

Browse files
committed
Finaliza o Everyday Types
1 parent 0e72fe6 commit 6544f30

File tree

2 files changed

+60
-13
lines changed

2 files changed

+60
-13
lines changed

README.md

+52-13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<!--toc:start-->
2-
32
- [TypeScript Learning](#typescript-learning)
43
- [Parte 1/2: TypeScript for JavaScript Programmers](#parte-12-typescript-for-javascript-programmers)
54
- [Tipos por Inferência](#tipos-por-inferência)
@@ -30,13 +29,16 @@
3029
- [Type annotation no retorno](#type-annotation-no-retorno)
3130
- [Funções que retornam Promises](#funções-que-retornam-promises)
3231
- [Funções anônimas](#funções-anônimas)
33-
- [Tipando objetos](#tipando-objetos)
34-
- [Propriedades opcionais (`?`)](#propriedades-opcionais)
35-
- [Union Types](#union-types)
36-
- [Definição vagamente matemática](#definição-vagamente-matemática)
37-
- [Trabalhando com Unions](#trabalhando-com-unions)
38-
- [Aliases para tipos](#aliases-para-tipos)
32+
- [Tipando objetos](#tipando-objetos)
33+
- [Propriedades opcionais (`?`)](#propriedades-opcionais)
34+
- [Union Types](#union-types)
35+
- [Definição vagamente matemática](#definição-vagamente-matemática)
36+
- [Trabalhando com Unions](#trabalhando-com-unions)
37+
- [Aliases para tipos (Type Aliases)](#aliases-para-tipos-type-aliases)
3938
- [Interfaces](#interfaces)
39+
- [Type Assertions](#type-assertions)
40+
- [Enums](#enums)
41+
- [Primitivos menos comuns](#primitivos-menos-comuns)
4042
- [Projetos de exemplo neste repositório](#projetos-de-exemplo-neste-repositório)
4143
- [Bibliografia](#bibliografia)
4244
<!--toc:end-->
@@ -516,7 +518,7 @@ names.forEach((name) => {
516518
});
517519
```
518520

519-
## Tipando objetos
521+
### Tipando objetos
520522

521523
Logo após os tipos primitivos, são os tipos com os quais mais se lida ao usar TypeScript, pois eles correspondem a qualquer valor em JS que possua propriedade.
522524

@@ -534,7 +536,7 @@ const route = {
534536
printCoord(route);
535537
```
536538

537-
### Propriedades opcionais (`?`)
539+
#### Propriedades opcionais (`?`)
538540

539541
**OBS.: para especificar um tipo opcional, use `?`.**
540542

@@ -553,17 +555,17 @@ getProfile("Richard Dawkins");
553555

554556
**OBS.: Em TS, ao usar um parâmetro opcional, primeiro cheque se ele é `undefined`.**
555557

556-
## Union Types
558+
### Union Types
557559

558560
A definição de Unions é combinação de tipos. Então, se você cria um tipo formado por dois ou mais tipos, você tem um Union. Eles representam valores que podem ser de qualquer um desses tipos. Os tipos pertencentes a Unions são chamados de _membros_.
559561

560-
### Definição vagamente matemática
562+
#### Definição vagamente matemática
561563

562564
Eu entendo os Unions num sentido vagamente matemático. União como uma união/intersecção de determinado conjunto mesmo. Se uma função, por exemplo, aceita um parâmetro que pode ser tanto `string` quanto `number`, é porque o tipo esperado dela encontra-se justamente na intersecção entre strings e números.
563565

564566
Essa noção é vaga porque eu não sou matemático. Se essa minha definição fizer sentido, nem que seja mnemônico, vou adotá-la. Se não fizer sentido nenhum, eu apago e tento fixar o conceito de outra forma.
565567

566-
### Trabalhando com Unions
568+
#### Trabalhando com Unions
567569

568570
Seguindo essa definição, o TypeScript só permite uma operação que for comum a todos os membros do union. Portanto, se um union type conter `string | number`, você não pode chamar um `.length` ou um `.toUpperCase()` nele, por exemplo.
569571

@@ -584,7 +586,7 @@ welcomePeople(["Yavanna", "Manwë", "Oromë"]);
584586
welcomePeople("Círdan");
585587
```
586588

587-
### Aliases para tipos
589+
### Aliases para tipos (Type Aliases)
588590

589591
Quando precisar reusar type annotations, use aliases. É a keyword `type`:
590592

@@ -666,6 +668,43 @@ interface Bear extends Animal {
666668
}
667669
```
668670

671+
### Type Assertions
672+
673+
Quando você precisa usar um tipo cujo qual o TS não sabe nada a respeito, você pode fazer _type assertions_. Eles são removidos posteriormente pelo compilador, então o TS não é capaz de checar a nulidade deles caso você cometa um typo.
674+
675+
```typescript
676+
// Sintaxe dos type assertions
677+
678+
const myCanvas = document.getElementById("main_canvas") as HTMLCanvasElement;
679+
680+
const myAnotherCantas = <HTMLCanvasElement>(
681+
document.getElementById("main_canvas")
682+
);
683+
```
684+
685+
### Enums
686+
687+
Descrevem um valor que poderia ser um conjunto/set de possíveis constantes nomeadas. Não estão relacionados a tipos, diferentemente de todas as outras adições que o TS faz no JS — ou seja, os Enums vão para o runtime pós-compilação. É uma feature do TS que foi passada para o JS. É um assunto mais específico que vai ficar de fora destes estudos iniciais. Aqui estamos focando em ficar proficientes em tipos em TS.
688+
689+
### Primitivos menos comuns
690+
691+
Bigint e Symbol. Segunda vez que tangencio o symbol e ainda acho que eles são como magia de bruxo: todos sabem que existe, mas ninguém nunca viu. A primeira vez foi no curso [Just JavaScript](https://github.com/divertimentos/just-javascript?tab=readme-ov-file#symbols) do Dan Abramov.
692+
693+
Segundo a documentação do TS, "O Symbol é um primitivo em JS usado para criar uma referência global única através da função `Symbol()`".
694+
695+
De vez em quando é interessante a experiência de contrariar os ensinamentos sobre culhão e brio do prof. Clóvis de Barros e conseguir entender 0% de uma explicação que você releu 35 vezes.
696+
697+
```typescript
698+
const firstName = Symbol("Melkor");
699+
const lastName = Symbol("Melkor");
700+
701+
if (firstName === lastName) {
702+
// O TS pistola na hora e eu não faço ideia do porquê.
703+
}
704+
```
705+
706+
Já o `bigint` é um novo tipo primitivo em JS usado para representar números realmente grandes.
707+
669708
# Projetos de exemplo neste repositório
670709

671710
- [TypeScript Sample Project](https://github.com/divertimentos/typescript-learning/tree/main/example-projects/typescript-sample)

example-snippets/symbols.ts

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// const firstName = Symbol("Melkor");
2+
// const lastName = Symbol("Melkor");
3+
//
4+
// if (firstName === lastName) {
5+
// // O TS pistola na hora e eu não faço ideia do porquê.
6+
// }
7+
//
8+
// console.log(typeof firstName === typeof lastName);

0 commit comments

Comments
 (0)