-
Notifications
You must be signed in to change notification settings - Fork 0
/
MappedTypes.ts
60 lines (45 loc) · 1.06 KB
/
MappedTypes.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
// ==> Exemplo 01: Mapped Types
type Usuario = {
nome: string;
endereco: string;
telefone: string;
idade: number;
};
type UsuarioOpcional = {
nome?: string;
endereco?: string;
telefone?: string;
idade?: number;
};
type UsusarioSomenteLeitura = {
readonly nome: string;
readonly endereco: string;
readonly telefone: string;
readonly idade: number;
};
// { [P in K]: T }
type UsuarioMappedType = {
[P in keyof Usuario]?: Usuario[P]; // for in
};
// 'nome' | 'endereco' | 'telefone' | 'idade'
const usuarioMapped: UsuarioMappedType = {
nome: 'Glaucia Lemos',
endereco: 'Rua 01, 123',
}
console.log(usuarioMapped);
// ==> Exemplo 02: Outros Tipos Avançados
interface Livro {
titulo: string;
autor: string | null;
preco: number;
numeroPaginas: number;
}
type Artigo = Omit<Livro, 'numeroPaginas'>;
type LivroModelo = Readonly<Livro>;
const livro: LivroModelo = {
autor: 'Boris Cherny',
numeroPaginas: 324,
preco: 19.99,
titulo: 'Programming Typescript: Making Your JavaScript Applications Scale'
}
// livro.autor = "Glaucia Lemos"