-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path1_basic_types.ts
159 lines (89 loc) · 3.69 KB
/
1_basic_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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/**
* Базовые типы
*
* Это примитивные типы из JavaScript и некоторые специальные типы
*
*
* Boolean - булев тип
* Number - числа
* String - строки
* Array - массивы
* Tuple - кортежи (упорядоченный набор фиксированной длины)
* Enum - перечисления (подмножества строк или чисел)
* Any - любой тип (отключает статическую проверку типов)
* Void - пустой тип
* Never - тип для невозможного значения
* Object - любой не примитивный тип
* Null and Undefined - Null and Undefined
* Symbol - Symbol
*/
/**
* Boolean
*/
let isDone: boolean = true;
// ^^^^^^^
// аннотация типа - explicit typing
let falsy = false;
// выведенный тип - неявная типизация
// inferred type - implicit typing
/**
* Number
*
* Все числа как и в JavaScript - числа с плавающей точкой
*/
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
// выведен минимально-возможный общий тип
let inferredNumber = 6;
/**
* String
*/
let fullName: string = 'Bob Bobbington';
let age: number = 37;
let sentence: string = `Hello, my name is ${ fullName }.`;
/**
* Array
*/
let list: number[] = [1, 2, 3];
let list2: Array<number> = [1, 2, 3];
const listElem = list.pop();
// подсказки методов и возвращаемых значений
list.some(e => e > 10)
// подсказки типов элементов
const implicitTypedArray = [];
// массив без объявления типа
implicitTypedArray.push(1);
implicitTypedArray.push('str');
implicitTypedArray.push(null);
implicitTypedArray;
// типизируется на основании анализа кода по входящим в него элементам
implicitTypedArray.filter(v => v.toFixed() < 10);
// ^^^^^^^^^^^^^ - ошибка найдена благодаря анализу кода
/**
* Null и Undefined
*/
// этим переменным можно присвоить только соответствующие значения
let u: undefined = undefined;
let n: null = null;
// По умолчанию типы null и undefined являются подтипами всех других типов
// То есть переменной любого типа можно присвоить значение null или undefined
// Это поведение можно изменить флагом --strictNullChecks (или общим флагом --strict)
// после этого null и undefined можно будет присвоить переменным типов void, null и undefined.
// Это позволяет избежать большого числа ошибок
let possibleNull: string | null = null;
// Нельзя присвоить null не nullable типу со вклёченном флагом --strictNullChecks
let impossibleNull: string = null;
/**
* Object
*
* Представляет любой не примитивный тип
*/
declare function create(o: object | null): void;
create({ prop: 0 }); // OK
create(null); // OK
create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error