es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

proptypes en array de forma, número o cadena

Estoy tratando de crear propTypes para una propiedad opcional que puede ser una cadena, un número o un objeto con ciertas propiedades.

Esto es lo que he intentado:

MyComponent.propTypes = {
  filter: PropTypes.oneOfType([
    PropTypes.shape({
      deviceId: PropTypes.number,
      deviceType: PropTypes.string,
      firmware: PropTypes.string,
      name: PropTypes.string,
      serialNumber: PropTypes.string,
    }),
    PropTypes.string,
    PropTypes.number,
  ])
};

No genera ningún error independientemente del valor de la propiedad. Puedo dar cualquier valor para el filtro. Puede ser un booleano o una matriz sin quejas.
También me gustaría limitar las propiedades posibles a las enumeradas anteriormente.
¿Alguna idea de lo que está mal y cómo hacer que funcione?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que la declaración de propTypes que has escrito es correcta y debería funcionar como se espera. Sin embargo, si deseas limitar las posibles propiedades en el objeto, puedes usar la función PropTypes.exact() en lugar de PropTypes.shape().

    Intenta actualizar tu declaración de propTypes de la siguiente manera:

    MyComponent.propTypes = {
      filter: PropTypes.oneOfType([
        PropTypes.exact({
          deviceId: PropTypes.number,
          deviceType: PropTypes.string,
          firmware: PropTypes.string,
          name: PropTypes.string,
          serialNumber: PropTypes.string,
        }),
        PropTypes.string,
        PropTypes.number,
      ])
    }
    

    Esto asegurará que la prop ‘filter’ solo pueda ser uno de los tres tipos especificados y que la forma del objeto sea exactamente como se espera.

Comments are closed.