Estoy escribiendo en JavaScript, con jsCheck: true en mi archivo jsconfig y usando vscode para autocompletar intellisense
Declaro el tipo de Opciones en un archivo:
/** * @typedef {Object} Option * @property {string} value machine readable value * @property {string} [label] human readable label **/Lo importo en otro lugar, junto con la definición del tipo para un componente de reacción.
/** @typedef {import('./MyMenuComponent').Option} Option */ /** * @typedef {Object} Props * @property {string} menuSubheadingKey used to help group options * ... more properties * @property {Option} option to be rendered */ /** * @type {React.FC<Props>} */ const MenuOption = React.ForwardRef(({ menuSubheadingKey, // ... more props option }, ref) => { // render component here - no errors }) MenuOption.propTypes = { menuSubheadingKey: string.isRequired, // ... more prop types option: shape({ value: string.isRequired, label: string.isRequired }).isRequired // <---typescript error ts2322 }El texto del error se ve así:
Type 'Validator<InferProps<{value: Validator<string>; label: Validator<string>; }>>' is not assignable to type 'Validator<Option>'. Type 'InferProps<{value: Validator<string>; label: Validator<string>; }> is not assignable to type Option Property 'value' is optional in type 'InferProps<{value: Validator<string>; label: Validator<string>; }>' but required in type 'Option' MenuOption.js(13,8): The expected type comes from property 'option' which is declared here on type 'WeakValidationMap<Props>'Tengo accesorios predeterminados para algunos de los otros accesorios, pero no para los dos anteriores. He hecho que tanto el valor como la etiqueta sean necesarios para este accesorio deliberadamente.
¿Por qué cree que el value es opcional en la declaración de proptype?