Skip to content

Commit c1c284f

Browse files
committed
[Fix] require-default-props: avoid crash from #3064
Fixes #3068. Fixes #3069
1 parent 230ffe1 commit c1c284f

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

lib/rules/require-default-props.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ module.exports = {
6060

6161
Object.keys(propTypes).forEach((propName) => {
6262
const prop = propTypes[propName];
63+
if (!prop.node) {
64+
return;
65+
}
6366
if (prop.isRequired) {
6467
if (forbidDefaultForRequired && defaultProps[propName]) {
6568
context.report({

tests/lib/rules/require-default-props.js

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ const ruleTester = new RuleTester({parserOptions});
3030

3131
ruleTester.run('require-default-props', rule, {
3232

33-
valid: [
33+
valid: [].concat(
3434
//
3535
// stateless components as function declarations
3636
{
@@ -1089,8 +1089,39 @@ ruleTester.run('require-default-props', rule, {
10891089
};
10901090
`,
10911091
parser: parsers.BABEL_ESLINT
1092-
}
1093-
],
1092+
},
1093+
parsers.TS([{
1094+
code: `
1095+
import React from "react";
1096+
1097+
interface Props {
1098+
name: string;
1099+
}
1100+
1101+
const MyComponent: React.FC<Props> = ({ name }) => {
1102+
return <div>{name}</div>;
1103+
};
1104+
1105+
export default MyComponent;
1106+
`,
1107+
parser: parsers.TYPESCRIPT_ESLINT
1108+
}, {
1109+
code: `
1110+
import React from "react";
1111+
1112+
interface Props {
1113+
name: string;
1114+
}
1115+
1116+
const MyComponent: React.FC<Props> = ({ name }) => {
1117+
return <div>{name}</div>;
1118+
};
1119+
1120+
export default MyComponent;
1121+
`,
1122+
parser: parsers['@TYPESCRIPT_ESLINT']
1123+
}])
1124+
),
10941125

10951126
invalid: [
10961127
//

0 commit comments

Comments
 (0)