diff --git a/lib/rules/no-unused-vars.js b/lib/rules/no-unused-vars.js index 0f6aef8..3995024 100644 --- a/lib/rules/no-unused-vars.js +++ b/lib/rules/no-unused-vars.js @@ -92,6 +92,15 @@ module.exports = { break; } + case "TSTypeLiteral": { + annotation.members.forEach(member => { + if (member.typeAnnotation) { + markTypeAnnotationAsUsed(member.typeAnnotation); + } + }); + + break; + } case "TSUnionType": case "TSIntersectionType": annotation.types.forEach(type => { @@ -257,6 +266,12 @@ module.exports = { ClassDeclaration: markClassOptionsAsUsed, ClassExpression: markClassOptionsAsUsed, + ObjectPattern(node) { + if (node.typeAnnotation) { + markTypeAnnotationAsUsed(node.typeAnnotation); + } + }, + MethodDefinition(node) { if (node.decorators) { node.decorators.forEach(markDecoratorAsUsed); diff --git a/tests/lib/rules/no-unused-vars.js b/tests/lib/rules/no-unused-vars.js index fbc5937..a737b3d 100644 --- a/tests/lib/rules/no-unused-vars.js +++ b/tests/lib/rules/no-unused-vars.js @@ -373,6 +373,22 @@ ruleTester.run("no-unused-vars", ruleNoUnusedVars, { ].join("\n"), parser }, + { + code: [ + "import { Nullable } from 'nullable'", + "const foo = ({ nullable }: Nullable) => nullable", + "foo({ nullable: null })" + ].join("\n"), + parser + }, + { + code: [ + "import { ReproInterface } from 'ReproInterface'", + "const x = ({ a = null } : { a: ReproInterface }) => a", + "console.log(x)" + ].join("\n"), + parser + }, { code: [ "import { Nullable } from 'nullable'",