У меня есть метод, который принимает в качестве входных данных объект, значения которого являются массивами строк; он возвращает объект, значения которого являются объектами с ключами, равными строковым значениям. Например,
myFunction({foo: ['a', 'b']}) // ==> {foo: {a: Widget, b: Widget}}
Я пытаюсь определить сигнатуру этой функции. Моя лучшая попытка:
declare function myFunction
<Q extends string[], T extends {[key: string]: Q}>
(keys: T) : {[key1 in keyof T]: {[key2 in T[key1][number]]: Widget}}
Это почти работает, за исключением того, что имена ключей вложенных объектов не выводятся. Первый пример возвращает:
{
foo: {
[x: string]: Widget;
};
}
, тогда как я хочу, чтобы он возвратил
{
foo: {
a: Widget;
b: Widget;
};
}
Можно ли это сделать?