Дано:
type Indexed<Key extends number, Value> {
[key in Key]: Value
}
let objLiteral: Indexed<1 | 2, string> = {
1: "one",
2: "two",
}
Теперь я хочу динамически создать новый Indexed<1 | 2, {x: string}>
.Эквивалентный JavaScript должен быть правильным, но он не компилируется:
let mappedObj: Indexed<1 | 2, {x: string}> =
Object.keys(objLiteral).reduce((acc, cur) => {
acc[cur] = {x: objLiteral[cur]}
return acc
}, {})
Теперь, он прекрасно работает, если я добавлю as Indexed<1 | 2, { x: string }>
в его конец.Но это в основном просто говорит компилятору "поверь мне, это правильно".Есть ли способ сделать это, который не требует переопределения системы типов таким способом?