diff --git a/lib/rules/prefer-read-only-props.js b/lib/rules/prefer-read-only-props.js index 028cf304cb..d97df5af67 100644 --- a/lib/rules/prefer-read-only-props.js +++ b/lib/rules/prefer-read-only-props.js @@ -51,7 +51,7 @@ module.exports = { Object.keys(component.declaredPropTypes).forEach((propName) => { const prop = component.declaredPropTypes[propName]; - if (!isFlowPropertyType(prop.node)) { + if (!prop.node || !isFlowPropertyType(prop.node)) { return; } diff --git a/tests/lib/rules/prefer-read-only-props.js b/tests/lib/rules/prefer-read-only-props.js index b6e66dfeed..4f27fce90c 100644 --- a/tests/lib/rules/prefer-read-only-props.js +++ b/tests/lib/rules/prefer-read-only-props.js @@ -29,7 +29,7 @@ const parserOptions = { const ruleTester = new RuleTester({parserOptions}); ruleTester.run('prefer-read-only-props', rule, { - valid: [ + valid: [].concat( { // Class component with type parameter code: ` @@ -162,8 +162,39 @@ ruleTester.run('prefer-read-only-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: [ {