Size: a a a

2021 June 09

C

Constantine in Frontend UA
например
источник

C

Constantine in Frontend UA
имеем следующие интерфейсы
interface IExample1 = { 
a: number;
make: string;
}

interface IExample2 = {
a: number;
model: string;
}

interface IExample3 = {
a: number:
weight: number
}
источник

C

Constantine in Frontend UA
type UnionType = IExample1 | IExample2 | IExample3
funciton evalExample(yourEntity: UnionType) {
return yourEntity.weight;
}
источник

C

Constantine in Frontend UA
на этой функции тс упадет с ошибкой ибо не знает о проперти weight для IExample1 и IExample2
источник

C

Constantine in Frontend UA
но если в функцию добавить тайпгарды, что и в любом случае стоило бы сделать - тс еще и подскажет о наличии проперти
источник

C

Constantine in Frontend UA
в общем логично
источник

AK

Andrew Kostetskyi in Frontend UA
для мене не логічно, що він не свариться коли приходить {a: 1, model: tesla, weight: 1000}
источник

AK

Andrew Kostetskyi in Frontend UA
тут не очевидно в який if воно зайде першим
источник

EO

Eugene Obrezkov in Frontend UA
Тайпскрипт не номинально проверяет, а структурно
источник

C

Constantine in Frontend UA
function isExample3(entity : UnionType) : entity is IExample3 {
return entity.weight !== undefined
}
источник

C

Constantine in Frontend UA
+1
источник

EO

Eugene Obrezkov in Frontend UA
| это не ИЛИ в типах, это операция объединения множеств
источник

EO

Eugene Obrezkov in Frontend UA
Ты не сказал что мне нужно ИЛИ то ИЛИ это. Ты сказал что мне нужно И то И это
источник

C

Constantine in Frontend UA
и соответственно функция evalExample будет содержать в себе тайпгарды и будет результат, который Вы ожидаете
источник

C

Constantine in Frontend UA
но вообще проще объяснение действительно звучит так)
источник

EO

Eugene Obrezkov in Frontend UA
Ещё проще это вспомнить диаграммы Венна
источник

EO

Eugene Obrezkov in Frontend UA
И нарисовать там две диаграммы на эти два типа
источник

EO

Eugene Obrezkov in Frontend UA
| объединит два подмножества
& сделает пересечение подмножеств
источник

C

Constantine in Frontend UA
это пересекающиеся “круги” множеств?)
источник

EO

Eugene Obrezkov in Frontend UA
Ага
источник