正确声明函数参数的接口或类型
Correctly declare interface or type for functions params
如何在函数 addCardsToStatus 中正确声明参数 cardsByStatus 的类型?它适用于 cardsByStatus: any,但对我来说没有意义。
错误:属性 '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)
您应该先更改界面 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)
如何在函数 addCardsToStatus 中正确声明参数 cardsByStatus 的类型?它适用于 cardsByStatus: any,但对我来说没有意义。
错误:属性 '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)
您应该先更改界面 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)