Я создал поток, пытаясь проиллюстрировать проблему, описанную выше: Попробуйте это здесь
Из этого я вижу, что проблема в том, что в TAction
и мета, и полезная нагрузкапомечены как необязательные свойства .Поэтому, прежде чем разрушать полезную нагрузку, необходимо проверить, что она не undefined
.Код, подобный следующему, не будет иметь ошибок потока:
export type TAction<T, R> = { +type: string, payload?: T, meta?: R };
function thisWorks(action: TAction<string, boolean>) {
const {
payload,
meta,
} = action;
// Flow knows payload is string and meta a boolean
}
function doesntWork(action: TAction<{| prop1: string, prop2: string |}, boolean>
) {
const {
payload,
meta,
} = action;
if (payload) {
const { prop1, prop2 } = payload;
// Do whatever is needed
}
}
Попробуйте с потоком
Или, альтернативно, можно изменить аннотацию для TAction
, поэтому payload
и meta
больше не будет необязательными свойствами, например:
export type TAction<T, R> = { +type: string, payload: T, meta: R };
function thisWorks(action: TAction<string, boolean>) {
const {
payload,
meta,
} = action;
// Flow knows payload is string and meta a boolean
}
function doesntWork(action: TAction<{| prop1: string, prop2: string |}, boolean>
) {
const {
payload: { prop1, prop2 },
meta,
} = action;
// Flow doesn't know the type of prop1, prop2 or meta
}
Попробуйте с потоком