From c1c284fc79dfdf755fc491b581d183706ba317a0 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Sun, 5 Sep 2021 09:17:00 -0700 Subject: [PATCH] [Fix] `require-default-props`: avoid crash from #3064 Fixes #3068. Fixes #3069 --- lib/rules/require-default-props.js | 3 ++ tests/lib/rules/require-default-props.js | 37 ++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/lib/rules/require-default-props.js b/lib/rules/require-default-props.js index b6330b116b..ec718b626f 100644 --- a/lib/rules/require-default-props.js +++ b/lib/rules/require-default-props.js @@ -60,6 +60,9 @@ module.exports = { Object.keys(propTypes).forEach((propName) => { const prop = propTypes[propName]; + if (!prop.node) { + return; + } if (prop.isRequired) { if (forbidDefaultForRequired && defaultProps[propName]) { context.report({ diff --git a/tests/lib/rules/require-default-props.js b/tests/lib/rules/require-default-props.js index 3b3e248446..91d88ab448 100644 --- a/tests/lib/rules/require-default-props.js +++ b/tests/lib/rules/require-default-props.js @@ -30,7 +30,7 @@ const ruleTester = new RuleTester({parserOptions}); ruleTester.run('require-default-props', rule, { - valid: [ + valid: [].concat( // // stateless components as function declarations { @@ -1089,8 +1089,39 @@ ruleTester.run('require-default-props', rule, { }; `, parser: parsers.BABEL_ESLINT - } - ], + }, + parsers.TS([{ + code: ` + import React from "react"; + + interface Props { + name: string; + } + + const MyComponent: React.FC = ({ name }) => { + return
{name}
; + }; + + export default MyComponent; + `, + parser: parsers.TYPESCRIPT_ESLINT + }, { + code: ` + import React from "react"; + + interface Props { + name: string; + } + + const MyComponent: React.FC = ({ name }) => { + return
{name}
; + }; + + export default MyComponent; + `, + parser: parsers['@TYPESCRIPT_ESLINT'] + }]) + ), invalid: [ //