вернется в р промис
const promise = ret(() => 42);
const p = promise.then(value => value);
const promise = ret(() => 42);
const p = promise.then(value => Promise.resolve(value));
если вы ожидаете смешанный тип - вам же нужно проверить какой именно тип был передан в функцию, правильно? иначе как с ним можно будет работать? Эти проверки выполняются "вручную" внутри функции, при этом проверять на все существующие типы тоже нет смысла, если вы ожидаете например, как в вашем случае: только 2 варианта "число" или "дату
Допишите там внутри чтобы и строку пропускало, или преобразуйте в число или дату или измените mixed на
Разве это было не понятно с самого начала?