-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1.ts
31 lines (25 loc) · 1.9 KB
/
1.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
//#1:Обьявление типа лучше его утверждения
interface Person {
name: string;
}
const alise : Person = {name : 'Alice'}; // Декларация типа Person
const bob = {name : 'Bob'} as Person; //Утдверждение типа Person
// ДЕКЛАРАЦИЯ
// Содержит описание типов без реализации.
// Например, сигнатуры функций без тела, название и тип глобальных переменных без значений.
// УТВЕРЖДЕНИЕ
// Фактически насильно преобразовывает к конкретному типу данных
const people_1 = ['alice', 'bob', 'jan'].map(name => ({name} as Person));
//Почему плохо? Рассмотрим следующий пример
const people_2 = ['alice', 'bob', 'jan'].map(name => ({} as Person));
// Как мы видим ошибки нет, но как будто мы хотим, чтобы TS каким-то образом смог нам подсказать
// Давайте попробуем применить декларацию
const people_3 = ['alice', 'bob', 'jan'].map(name => {
const person : Person = {name} // в данном случае мы декларируем переменную напрямую в функции - стрелке
return person;
});
// Зачем тогда вообще использовать утверждение типов? Это бывает полезно при работе с DOM деревом,
// тк как таковой TS почти никак не умеет работать с ним
// Friendly reminder
// 1) Выбирайте (: Type) вместо (as Type)
// 2) Используйте утверждение или ненулевые типы, только если знаете о типах больше чем сам TS