@Romo4ka_eto_ia
Просто человек

Как правильно типизировать return функции в зависимости от переданных параметров?

Всем доброго времени суток. Пишу библиотеку для типизации и возник вопрос по одному моменту, у меня есть Модель пользователя:

interface User {
        option: any
        option1: any
        option2: any
    }


Есть тип, который создает параметры, которые можно выбрать у пользователя:

type Options = {
        [key in keyof User]?: boolean
    }


Я передаю данный интерфейс в параметры функции, и из этой функции мне нужно вернуть юзера, но только с теми параметрами, которые были переданы в опции.

type Return<Options> = {
        [key in keyof Model]: key extends keyof User ? User[key] : never
    }

    function test(options: Options): Return<typeof options>


Предоставленный выше код не работает, IDE всё так же отображает все опции через Tab. Проблему удалось решить вот таким образом:

function test<T extends Options>(options: T): Return<T>


Но к сожалению из-за этого в коде создается ещё больше других проблем. Вопрос простой, можно ли сделать то, что я хочу по другому?
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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