2017-02-11 1 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, assignTo:? User}'. –

+0

Большое спасибо. Да, я заметил то же самое в ретроспективе и создал два типа: NullableUser и DefiniteUser, которые либо имеют тип пользователя или пользователя. Таким образом, для большей части моего кода я могу использовать тип DefiniteUser. –

ответ

6

Поток имеет specific syntax для объектов, которые ведут себя как карты.

Вашего полный пример будет выглядеть следующим образом:

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

А я вижу. Это большое спасибо! –