TypeScript:如何为具有许多相同类型的键和相同类型的值的对象创建接口?

时间:2018-10-11 20:19:39

标签: typescript redux typescript-typings normalizr typescript-types

我正在使用Redux和Normalizr在TypeScript中构建React Native应用。所以我将拥有正常状态。

我有四个接口:EmotionNeedPainDataPainReport

export interface Emotion {
  name: string;
  chosen: boolean;
  rating: number;
}

export interface Need {
  name: string;
  rating: number;
}

export interface PainData {
  note: string;
  emotions: Emotion[];
  needs: Need[];
  date: Date;
}

export interface PainReport {
  [date: string]: PainData
}

现在,我想创建一个不是数组的接口,而是一个允许多个PainReports这样的对象(伪代码)的接口:

export interface PseudoPainReportsObject {
  [date: string]: PainData,
  [date: string]: PainData,
  [date: string]: PainData,
  // ... dynamically have as many as I'd like. Maybe 1, maybe 100
}

我想像使用Normalizr一样将其用于规范化状态。

怎么会这样一种类型或接口?

2 个答案:

答案 0 :(得分:2)

使用TypeScript的Record类型的衬板:

type PseudoPainReportsObject = Record<string, PainData>;

Record<K, V>代表具有任意数量的K类型键的对象,这些键映射到V类型值。

答案 1 :(得分:1)

[date: string]允许任意多个属性; PainReport正是您想要的。

没有办法将其限制为仅一个属性。