2017-02-11 84 views
6

我正在慢慢地将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, 
}; 

真的很感谢这方面的帮助。谢谢!

+0

作为一个侧面说明,这不是很好的做法,定义你的类型,在其定义为空。您可能不希望'null'成为使用该类型的'User' _everywhere_的有效值。选择使用某些用户可以是空的会更好。例如'type Bug = {createdBy:User,assignedTo:?User}'。 –

+0

非常感谢。是的,我回顾了同样的事情,并创建了两种类型,NullableUser和DefiniteUser,它们都有?User或User类型。这样对于我的大部分代码,我可以使用DefiniteUser类型。 –

回答

6

对于行为与地图类似的对象,Flow有specific syntax

你完整的例子看起来像:

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

啊,我明白了。非常感谢! –