Я хочу объявить универсальную функцию, которая принимает частичный интерфейс в качестве параметра и возвращает этот литеральный параметр.
Я пробовал эти подписи безрезультатно:
- не ограничивает свойства и позволяет передавать любой ключ:
function setContextValue<V extends Partial<Context>>(values: V): V;
Возвращает
Partial<Context>
, что близко, но я хочу специально вернуть только разрешенные ключи
values
:
function setContextValue(values: Partial<Context>): typeof values;
Ближайшее, что у меня есть.Он правильно применяет частичный интерфейс, но возвращает свойства, не являющиеся членами, в виде
never
.
function setContextValue<V extends { [K in keyof V]: K extends keyof Context ? V[K] : never }>(values: V): V;
Является ли # 3 лучшим решением? Это невозможноуказать, что тип возвращаемого значения Pick<V, keyof Context>
?
Спасибо!