流类型对象中的动态属性名称
Posted
技术标签:
【中文标题】流类型对象中的动态属性名称【英文标题】:Dynamic property names in flow typed object 【发布时间】:2017-06-29 16:39:08 【问题描述】:我正在缓慢而坚定地在我的代码中使用 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,
;
非常感谢您对此的任何帮助。谢谢!
【问题讨论】:
附带说明,在其定义中将您的类型定义为可为空的不是好习惯。您可能不希望null
成为使用该类型的 User
everywhere 的有效值。最好选择使User
的某些用法可以为空。例如type Bug = createdBy: User, assignedTo: ?User
.
非常感谢。是的,我回想起来也注意到了同样的事情,并创建了两种类型,NullableUser 和 DefiniteUser,它们具有 ?User 或 User 类型。这样,对于我的大部分代码,我都可以使用 DefiniteUser 类型。
【参考方案1】:
Flow 有 specific syntax 用于表现类似于地图的对象:
[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,
;
【讨论】:
【参考方案2】:实际上,在 TypeScript 中,您可以为键使用名称,然后传递键的类型:
type User =
[key: string | number]: string;
;
在 FlowType 中,您可以像 TypeScript 一样进行操作,也可以在没有示例名称的情况下进行操作:
type User =
[string | number]: string,
;
【讨论】:
以上是关于流类型对象中的动态属性名称的主要内容,如果未能解决你的问题,请参考以下文章