-
Notifications
You must be signed in to change notification settings - Fork 1
/
types.ts
105 lines (86 loc) · 1.91 KB
/
types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
enum Genero {
MASCULINO,
FEMININO,
OUTRO,
}
type Aluno = {
nome: string;
dataNascimento?: Date;
numeroMatricula: number;
estaMatriculado: boolean;
genero: Genero;
};
const dalianny: Aluno = {
nome: "Dali",
numeroMatricula: 5896854,
estaMatriculado: true,
genero: Genero.OUTRO,
};
interface IAluno {
nome: string;
getIdade: () => number;
}
interface Model {
get: () => void;
create: () => void;
update: () => void;
delete: () => void;
}
class AlunoModel implements Model {}
class ProfessorModel implements Model {}
type Escola = {
alunos: Aluno[];
arrDeStr: string[];
arrAny: any[];
arrStrOrAluno: string[] | Aluno[];
};
/*
* União e Interseção de tipos
* Popularmente conhecido como OR e AND
*/
type AlunoMestrado = Aluno & {
projetoCientifico: boolean;
matriculaMestrado: number;
};
const Cicero: AlunoMestrado = {
nome: "Cicin",
numeroMatricula: 5897654,
estaMatriculado: true,
genero: Genero.MASCULINO,
projetoCientifico: true,
matriculaMestrado: 45648979,
};
type Doutorando = {
tesePhd: boolean;
};
type AlunoDoutorado = Omit<AlunoMestrado, "matriculaMestrado"> & Doutorando;
const Camila: AlunoDoutorado = {
nome: "Cicin",
numeroMatricula: 5897654,
estaMatriculado: true,
genero: Genero.MASCULINO,
projetoCientifico: true,
matriculaMestrado: 45648979, // erro porque mandei omitir mastriculaMestrado
tesePhd: true,
};
type Qualquer = Escola | Aluno;
const Evelyn: Qualquer = {
nome: "Evelyn",
numeroMatricula: 154894516,
estaMatriculado: false,
genero: Genero.FEMININO,
};
type AlunoOuvinteMestrado = Omit<
AlunoMestrado,
"numeroMatricula" | "projetoCientifico" | "matriculaMestrado"
>;
const Lenny: AlunoOuvinteMestrado = {
nome: "Lenny",
estaMatriculado: false,
genero: Genero.OUTRO,
};
type AlunoOuvinte = Pick<Aluno, "nome" | "dataNascimento" | "genero">;
const Lenny2: AlunoOuvinte = {
nome: "Lenny",
genero: Genero.OUTRO,
};