TypeScript:如何为具有许多相同类型的键和相同类型的值的对象创建接口?
TypeScript: How to create an interface for an object with many keys of the same type and values of the same type?
我正在使用 Redux 和 Normalizr 在 TypeScript 中构建一个 React Native 应用程序。所以我会有 noramlized 状态。
我有四个接口:Emotion
、Need
、PainData
和 PainReport
:
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 时那样将其用于规范化状态。
如何做这样的类型或接口?
[date: string]
允许任意多个属性; PainReport
做你想做的。
无法将其限制为只有一个 属性。
使用 TypeScript 的 Record
类型的一行:
type PseudoPainReportsObject = Record<string, PainData>;
Record<K, V>
表示具有任意数量的 K
类型键映射到 V
类型值的对象。
我正在使用 Redux 和 Normalizr 在 TypeScript 中构建一个 React Native 应用程序。所以我会有 noramlized 状态。
我有四个接口:Emotion
、Need
、PainData
和 PainReport
:
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 时那样将其用于规范化状态。
如何做这样的类型或接口?
[date: string]
允许任意多个属性; PainReport
做你想做的。
无法将其限制为只有一个 属性。
使用 TypeScript 的 Record
类型的一行:
type PseudoPainReportsObject = Record<string, PainData>;
Record<K, V>
表示具有任意数量的 K
类型键映射到 V
类型值的对象。