Я понимаю, что .reduce
довольно сложно набрать в TS, и то, что я пытаюсь сделать, может оказаться невозможным. Но в любом случае, я хотел бы получить совет о том, как лучше набрать следующее:
Допустим, у меня есть массив people
:
const people = [
{ id: '1' },
{ id: '2' },
{ id: '3' },
]
Я делаю форму сFormik
чтобы вы могли ввести имя для этих людей. Мне бы хотелось, чтобы values
этой формы было структурировано как-то вроде values.1.name
, где 1
- это id
этого человека.
const initialValues = people.reduce((acc, p) => ({
...acc,
[p.id]: {
name: '',
},
}), {});
При использовании формы в идеале я хочуValues
, который будет напечатан примерно так:
interface Values {
[key: '1' | '2' | '3']: string;
}
Проблема в том, что по умолчанию .reduce
будет набирать my initialValues
и в итоге будет набираться как {}
, поэтому пытаемся получить доступ values[person.id]
приведет к ошибке.
Я видел, что вы можете сделать это:
const peopleIds = {
one: true,
two: true,
three: true,
};
type PeopleIds = keyof typeof peopleIds;
Это может быть очень полезно, если мой список people
всегда будет статичным. По сути, я хочу, чтобы Values
был напечатан как объект, где все возможные ключи имеют значения people.id
.
Понятно, что это немного сложно, но мне интересно, выполнимо ли это даже в TS, так какЯ буду полагаться на такие вещи, как .reduce
, чтобы генерировать схему моей формы и все такое.
Спасибо!