Typescript-在Redux中定义初始状态时,为null属性设置类型

时间:2019-12-07 08:11:26

标签: reactjs typescript redux react-redux

在Redux中定义了reducer的初始状态后,我想获取初始状态的类型,以便在我向该状态添加任何属性时自动更新它。

这是我对初始状态的定义

let initialState = {
  food: {
    data: null,
    fetching: false,
    fetched: false,
    error: null
  }
}

然后我从该状态中提取类型定义

export type StoreState = typeof initialState;

food.data属性应为Food类型,其定义如下:

export interface Food {
  fdcId: number
  description: string
  nutrients: Array<Nutrient>
}

export interface Nutrient {
  name: string
  unitName: string
  amount: number
}

在初始状态下为food.data分配never时,默认情况下null被定义为类型nutrients。这样,当我要访问其属性Property 'nutrients' does not exist on type 'never'时,我会收到一条错误消息food.data

null as Food定义food.data是行不通的,因为这也会产生错误。

如果我用{} as Food定义了null,那么我将无法在化简器中将其设置为food.data

那么我的问题是,如何定义属性typeof,以便当我获得初始状态的food.data时,它知道Food的类型为{{1 }},而food.data仍可以是null

1 个答案:

答案 0 :(得分:0)

通过将数据定义为nullFood,我可以正常工作

let initialState = {
  food: {
    data: null as (null | Food),
    fetching: false,
    fetched: false,
    error: null
  },
}