2016-05-11 12 views
6

Come realizzare il seguente flussoflowtype come annotare l'unione con campi opzionali

export type Response = { 
    err: string, 
    data: ?Array<Object>, 
} | { 
    data: Array<Object>, 
}; 

voglio esprimere un tipo, che restituisce un errore e dati facoltativi o nessun campo di errore nel caso in cui non ci nessuno. Ma, che lo uso come

return { err: 'todo' }; 
       ^^^^^^^^^^^^^^^ object literal. This type is incompatible with 
.... Response 
union: object type(s) 

risposta

22

In Flow, c'è una differenza tra campi opzionali e valori nullable.

  1. {key: ?valueType} significa che l'oggetto mosto contengono key, e il suo valore deve essere o nullo di tipo valueType.

  2. {key?: valueType} significa che l'oggetto potenza contengono key, e se key è presente, il suo valore deve essere di tipo valueType.

  3. {key?: ?valueType} significa che l'oggetto potenza contengono key, e se key è presente, il suo valore deve essere nullo di tipo valueType.

Il tuo caso d'uso ha bisogno di # 2 o # 3. Personalmente raccomanderei di non usare # 3 - Trovo che lo schema sia più flessibile di quanto debba essere.

+1

grazie per la risposta dettagliata. molto sottile, e non avrei notato. grazie ancora. – bsr

+0

Mi hai appena salvato dal saltare fuori dalla finestra, grazie. – NiKo

+0

Dov'è la documentazione per '{chiave:? ValoreTipo}'? Non è in https://flow.org/en/docs/types/objects/. – Gajus

0

sembra, la mia sintassi era sbagliata per campi opzionali

export type Response = { 
    err: string, 
    data?: Array<Object>, 
} | { 
    data: Array<Object>, 
}; 

questo non dà alcun errore. Non so perché non è stato segnalato alcun errore di sintassi per questo.

Problemi correlati