У меня есть следующий (пример-) массив:
[
'test-string',
foo => ({ foo }),
'other-string',
bar => ({ bar })
]
с (пример-) интерфейсом
interface MyValues { foo: string; bar: string; }
Функция, которая ожидает этот тип массива, должна гарантировать, что объединение результатов всех функций реализует полный интерфейс. Это возможно?
В настоящее время у меня есть:
type Fn<Values> = (part: string) => { [key in keyof Values]?: string }
type Item<Values> = string | Fn<Values>;
function extract<Values>(items: Item<Values>[]) {
const values = {} as Values;
// (...)
return values;
}
Однако эта типизация проверяет только то, что все функции возвращают объекты, соответствующие ключам Values
, а не то, что все ключи наконец присутствуют.
Я не совсем уверен, возможна ли эта проверка даже с TypeScript, я нашел этот ответ , который также идет в направлении «вычислений» типов, но я не уверен, применима ли это для этого использования -случае.