正确声明接口或键入功能参数

发布于 2025-01-28 14:04:20 字数 1471 浏览 3 评论 0原文

如何正确声明param cardbystatus 内部功能 addcardstostatus 的类型?它适用于 cardbystatus:任何,但对我来说没有意义。

错误:属性'map'在类型'{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)

How to correctly declare type for param cardsByStatus inside function addCardsToStatus? It works for cardsByStatus: any, but it doesn't make sense for me.

Error: Property 'map' does not exist on type '{ cards: 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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧人九事 2025-02-04 14:04:20

您应该首先更改接口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)

最后,如果将选项传递给该方法,如果将其定义为带有string内部的对象,现在将投诉。 So we should change it to this:

const options = { optionsStatus: HealthPlanStatus.InProgress }

addCardsToStatus(cardsByStatus, options)

You should first change the interface IOptions:

interface IOptions {
    optionsStatus: HealthPlanStatus
}

If optionsStatus is defined as string, it is not allowed to use it to index on object of type ICardsByStatus.

You also defined ICardByStatus to have an additional key { cards: number[] }. To access the array, you should use this key.

cardsByStatus[optionsStatus].cards.map((card:number) => card)
cardsByStatus["InProgress"].cards.map((card:number) => card)

And lastly TypeScript will now complain if you pass options to the method if you defined it as an object with a string inside. So we should change it to this:

const options = { optionsStatus: HealthPlanStatus.InProgress }

addCardsToStatus(cardsByStatus, options)

Playground

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文