En flujo, ¿es posible definir un tipo de objeto exacto, donde las claves también son tipos?
En mecanografiado puede lograr esto usando cadenas, como...
export const userSettingsId = 'user-settings'; export type UserSettings = { favourites: boolean, }; export const groupSettingsId = 'group-settings'; export type GroupSettings = { enabled: boolean, }; export type Settings = { [userSettingsId]: UserSettings, [groupSettingsId]: GroupSettings, }; const valid: Settings = { 'user-settings': { favourites: true }, 'group-settings': { enabled: true } } const invalid1: Settings = { 'user-settings': { favourites: true }, 'group-settings': { enabled: true }, 'friend-settings': { enabled: true } } const invalid2: Settings = { 'user-settings': { favourites: true }, 'group-settings': { enabled: true, burritos: true }, }No puede usar cadenas como tipos en el flujo, pero tampoco parece poder usar tipos de cadenas literales. Flow parece esperar que los tipos de claves sean un indexador que luego no admite esto.
Esto no funciona por ejemplo...
export type UserSettingsId = 'user-settings'; export const userSettingsId: UserSettingsId = 'user-settings'; export type UserSettings = {| favourites: boolean, |}; export type GroupSettingsId = 'group-settings'; export const groupSettingsId: GroupSettingsId = 'group-settings'; export type GroupSettings = {| enabled: boolean, |}; export type Settings = {| [UserSettingsId]: UserSettings, [GroupSettingsId]: GroupSettings, |};La razón por la que quiero hacer esto es para poder usar la clave por sí sola y asegurarme de que esté sincronizada con el objeto para cuando busque la clave. ¿Alguien sabe si hay alguna solución a esto en el flujo?