问题 流类型对象中的动态属性名称


我正在慢慢地将flowType工作到我的代码中,但我正在努力解决一个概念。

如何指定对象的未知动态命名属性的类型?

例如,我的用户对象可能包含一个包含具有唯一键的组织的对象。

我该如何定义?

export type User = ?{
  currentOrg: string,
  displayName?: string,
  email: string,
  emailVerified: boolean,
  newAccount: boolean,
  organisations?: {
     UNKNOWNKEY?: string {
       orgData1: string,
       orgData2: string,
     }
  },
  uid: string,
  photoUrl?: string,
};

真的很感激任何帮助。谢谢!


10750
2018-02-11 09:52


起源

作为旁注,在您的定义中将类型定义为可空是不好的做法。你可能不想要 null 成为a的有效值 User  到处 使用的类型。选择加入某些用法要好得多 User 空。例如 type Bug = { createdBy: User, assignedTo: ?User }。 - Peter Hall
非常感谢。是的,回想起来我注意到了同样的事情并创建了两种类型,NullableUser和DefiniteUser,它们都有?User或User类型。对于我的大部分代码,我都可以使用DefiniteUser类型。 - Sam Matthews


答案:


流量有 具体语法 对于行为类似于地图的对象:

{ [key: K]: V }

哪里 K 是键的类型和 V 是值的类型。

您的完整示例如下所示:

export type User = {
  currentOrg: string,
  displayName?: string,
  email: string,
  emailVerified: boolean,
  newAccount: boolean,
  organisations?: { [key: string]: string },
  uid: string,
  photoUrl?: string,
};

14
2018-02-12 06:07



啊,我明白了。非常感谢! - Sam Matthews