diff --git a/lib/util/propTypes.js b/lib/util/propTypes.js index bb0804a10a..24b83a579e 100644 --- a/lib/util/propTypes.js +++ b/lib/util/propTypes.js @@ -764,7 +764,6 @@ module.exports = function propTypesInstructions(context, components, utils) { this.declaredPropTypes.children = { fullName: 'children', name: 'children', - node: {}, isRequired: false }; } diff --git a/lib/util/usedPropTypes.js b/lib/util/usedPropTypes.js index dc62c8b3ba..aad4798b68 100644 --- a/lib/util/usedPropTypes.js +++ b/lib/util/usedPropTypes.js @@ -454,7 +454,7 @@ module.exports = function usedPropTypesInstructions(context, components, utils) Object.keys(propTypes).forEach((key) => { const node = propTypes[key].node; - if (node.value && astUtil.isFunctionLikeExpression(node.value)) { + if (node && node.value && astUtil.isFunctionLikeExpression(node.value)) { markPropTypesAsUsed(node.value); } }); diff --git a/tests/lib/rules/no-unused-prop-types.js b/tests/lib/rules/no-unused-prop-types.js index fa5f732927..589de12fad 100644 --- a/tests/lib/rules/no-unused-prop-types.js +++ b/tests/lib/rules/no-unused-prop-types.js @@ -3908,6 +3908,22 @@ ruleTester.run('no-unused-prop-types', rule, { type StateProps = ReturnType type DispatchProps = ReturnType`, parser: parsers['@TYPESCRIPT_ESLINT'] + }, + { + code: [ + 'import React from "react";', + '', + 'interface Props {', + ' name: string;', + '}', + '', + 'const MyComponent: React.FC = ({ name }) => {', + ' return
{name}
;', + '};', + '', + 'export default MyComponent;' + ].join('\n'), + parser: parsers['@TYPESCRIPT_ESLINT'] } ]) ),