У меня есть функция, которая принимает объект в качестве модели и объект, который представляет отображение. Он возвращает объект с двумя свойствами: одно, представляющее базовую модель, и одно, представляющее модель с каждым свойством, заключенным в другой тип. Отображение определяет ключи возвращаемого объекта, и отображение всегда будет
type Mapping<Model> = {
foo: string,
bar: string
}
function fooBar<M extends object, B extends Mapping>(model: M, mapping: B) {
return {
[mapping.foo]: model,
[mapping.bar]: recursiveWrap(model) //this function would go through the model and wrap each property
}
}
, поэтому вызов этой функции будет таким:
fooBar({ message: 'hello' }, { foo: 'thing', bar: 'thing$' })
должен возвращать тип, похожий на this:
type MyType = {
thing: { message: string },
thing$: WrappedType<{ message: string }>
}
Но я не могу понять, как подставить имена свойств из объекта и все же правильно проверить тип.
Я следовал вместе с этим вопросом , но тогда тип возвращаемых свойств был { message: string } | WrappedType<{ message: string }>
. Есть ли способ осуществить это без результата, являющегося типом объединения?