正确声明函数参数的接口或类型

Correctly declare interface or type for functions params

如何在函数 addCardsToStatus 中正确声明参数 cardsByStatus 的类型?它适用于 cardsByStatus: any,但对我来说没有意义。

错误:属性 'map' 不存在于类型 '{ car​​ds: number[]; }'

Link for live example

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)

最后,如果您将 options 传递给该方法,如果您将其定义为内部具有 string 的对象,TypeScript 现在会报错。所以我们应该把它改成这样:

const options = { optionsStatus: HealthPlanStatus.InProgress }

addCardsToStatus(cardsByStatus, options)

Playground