Как правильно объявить тип параметра карты по статусу внутри функции аддкартстостатус? Это работает для cardByStatus: любой, но для меня это не имеет смысла.
Ошибка: свойство «карта» не существует для типа «{cards: number[]; }'
enum HealthPlanStatus {
InProgress = 'InProgress',
Completed = 'Completed',
}
type ICardsByStatus = {
[status in HealthPlanStatus]:{
cards: number[]
}
}
interface IOptions {
optionsStatus: string
}
function addCardsToStatus(cardsByStatus: ICardsByStatus, options: IOptions) {
const {optionsStatus}: IOptions = options
cardsByStatus[optionsStatus].map((card:number) => card)
cardsByStatus["InProgress"].map((card:number) => card)
}
const cardsByStatus = { InProgress: { cards: [] }, Completed: { cards: [ 1, 2, 3 ] } }
const options = { optionsStatus: 'InProgress' }
addCardsToStatus(cardsByStatus, options)






Вы должны сначала изменить интерфейс IOptions:
interface IOptions {
optionsStatus: HealthPlanStatus
}
Если optionsStatus определен как string, его нельзя использовать для индексации объекта типа ICardsByStatus.
Вы также определили ICardByStatus, чтобы иметь дополнительный ключ { cards: number[] }. Чтобы получить доступ к массиву, вы должны использовать этот ключ.
cardsByStatus[optionsStatus].cards.map((card:number) => card)
cardsByStatus["InProgress"].cards.map((card:number) => card)
И, наконец, TypeScript теперь будет жаловаться, если вы передадите options методу, если вы определили его как объект с string внутри. Поэтому мы должны изменить его на это:
const options = { optionsStatus: HealthPlanStatus.InProgress }
addCardsToStatus(cardsByStatus, options)
cardsByStatus["InProgress"]— это объект, поэтому вы не можетеmap(). ИспользуйтеcardsByStatus["InProgress"].cards.map((card:number) => card), чтобы перебирать карты. Кроме того, чтобы использоватьIOptionsдля доступа к объектам в качестве ключа, вы должны использоватьoptionsStatus: HealthPlanStatusв качестве типа, иначе ключ может не существовать для данного объекта.