From 6301a821fe3c947e676e11b044301168ddb0cf1a Mon Sep 17 00:00:00 2001 From: Pascal Corpet Date: Fri, 2 Oct 2020 00:09:43 +0200 Subject: [PATCH] [no-unused-prop-types] Silence false positive on `never` type in TS. --- lib/rules/no-unused-prop-types.js | 5 +++++ tests/lib/rules/no-unused-prop-types.js | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/lib/rules/no-unused-prop-types.js b/lib/rules/no-unused-prop-types.js index f6a95aca0a..fe3f113d98 100644 --- a/lib/rules/no-unused-prop-types.js +++ b/lib/rules/no-unused-prop-types.js @@ -102,6 +102,11 @@ module.exports = { return; } + if (prop.node && prop.node.typeAnnotation && prop.node.typeAnnotation.typeAnnotation + && prop.node.typeAnnotation.typeAnnotation.type === 'TSNeverKeyword') { + return; + } + if (prop.node && !isPropUsed(component, prop)) { context.report({ node: prop.node.key || prop.node, diff --git a/tests/lib/rules/no-unused-prop-types.js b/tests/lib/rules/no-unused-prop-types.js index 7ae9947f20..998d026f06 100644 --- a/tests/lib/rules/no-unused-prop-types.js +++ b/tests/lib/rules/no-unused-prop-types.js @@ -3668,6 +3668,19 @@ ruleTester.run('no-unused-prop-types', rule, { `, parser: parsers['@TYPESCRIPT_ESLINT'] }, + { + code: ` + interface Person { + firstname: string + lastname?: never + }; + + const Hello = ({firstname}: Person) => { + return
{firstname}
; + }; + `, + parser: parsers['@TYPESCRIPT_ESLINT'] + }, { code: ` class App extends Component {