Alexandroppolus
@Alexandroppolus
кодир

Почему у пересечения функций такой ReturnType?

Узнал тут невероятный факт, просто зацените:
type FuncsIntr = (() => 1) & (() => 2) & (() => 3);

type RetIntr = ReturnType<FuncsIntr>; // 3


В чем философия? Почему берется последний вариант?

С объединением функций всё в порядке:
type FuncsUn = (() => 1) | (() => 2) | (() => 3);

type RetUn = ReturnType<FuncsUn>; // 1 | 2 | 3

Playground
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
Ни в чём. Просто ограничение языка. Видимо слишком сложно было сделать и\или обосновать. Возможно в какой-то следующей версии языка пофиксят.

Вот issue помеченная как "Design Limitation", там есть workaroud(который не стоит юзать в проде, разве что если очень хочется).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
yarkov
@yarkov
Помог ответ? Отметь решением.
Смею предположить, что всё ОК. Просто & как-бы накладывает типы друг на друга в том порядке, в котором они определены. У вас 3 последняя, вот она и используется.
type FuncsObjr = (() => ({ prop: string, name: string })) & (() => ({ prop: string, name: number }));

const test: ReturnType<FuncsObjr> = { prop: '', name: '' }; // Error: Type 'string' is not assignable to type 'number'.(2322)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы