Flujo: El objeto que se pasa en el juego no es el tipo de intersección

votos
1

He definido los siguientes tipos:

type FooFields = {
  foo: string,
};

type BarFields = {
  bar: string,
};

type FormFieldType = {
  type: 'foo' | 'bar',
};

type FormFields = $Shape<FooFields & BarFields> & FormFieldType;

Con las siguientes funciones para comprobar si hay problemas de validación de estado de campo de formulario:

const isValid = (formFields: FormFields): boolean => {
  switch (formFields.type) {
    case 'foo':
      return isFooValid(formFields);
    case 'bar':
      return isBarValid(formFields);
  }

  return false;
};

const isFooValid = (formFields: FooFields): boolean => {
  return formFields.foo === 'hello';
};

const isBarValid = (formFields: BarFields): boolean => {
  return formFields.bar === 'hey';
};

Cuando trato de ejecutar el siguiente código a continuación ...

const state = {
  bar: 'hey',
  type: 'bar',
};

isValid(state);

Recibo este error de flujo:

 isValid(state);
        ^ Cannot call `isValid` with `state` bound to `formFields` because in property `type`: Either property `type` is missing in `FooFields` [1]. Or property `type` is missing in `BarFields` [2].

References:

13: type FormFields = $Shape<FooFields & BarFields> & FormFieldType;
                             ^ [1]

13: type FormFields = $Shape<FooFields & BarFields> & FormFieldType;
                                         ^ [2]

¿Por qué es el flujo tratando de encontrar el campo typeen FooFieldso BarFieldscuando se debe encontrar en FormFieldType?

Publicado el 07/11/2018 a las 22:38
fuente por usuario
En otros idiomas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more