Общий возвращаемый тип можно задавать параметром T, но объединение number|string само по себе не запрещает смешанные функции.
Нужно написать TypeScript-тип, который будет подходить и для функции, возвращающей number, и для функции, возвращающей string (через generic), но не должен проходить, если типы возвращаемых значений разные.
Общий возвращаемый тип можно задавать параметром T, но объединение number|string само по себе не запрещает смешанные функции.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Общий возвращаемый тип можно задавать параметром T, но объединение number|string само по себе не запрещает смешанные функции.
Для явно выбранного типа подойдёт type Pair<T extends number | string> = [() => T, () => T]. Тогда Pair<number> требует два числовых результата, а Pair<string> — два строковых. Pair<number | string> разрешит смесь; если нужны только две однородные альтернативы, используйте Pair<number> | Pair<string>. Правила вывода T нужно обсуждать отдельно.