diff --git a/lib/rules/no-undef-properties.js b/lib/rules/no-undef-properties.js index 36650f555..d7026eb62 100644 --- a/lib/rules/no-undef-properties.js +++ b/lib/rules/no-undef-properties.js @@ -127,6 +127,8 @@ module.exports = { /** @type { Set } */ this.reported = new Set() + + this.hasUnknownProperty = false } /** * Report @@ -135,6 +137,7 @@ module.exports = { * @param {boolean} [options.props] */ verifyReferences(references, options) { + if (this.hasUnknownProperty) return const report = this.report.bind(this) verifyUndefProperties(this.defineProperties, references, null) @@ -206,6 +209,10 @@ module.exports = { } }) } + + markAsHasUnknownProperty() { + this.hasUnknownProperty = true + } } /** @type {Map} */ @@ -280,6 +287,10 @@ module.exports = { const ctx = getVueComponentContext(programNode) for (const prop of props) { + if (prop.type === 'unknown') { + ctx.markAsHasUnknownProperty() + return + } if (!prop.propName) { continue } diff --git a/tests/lib/rules/no-undef-properties.js b/tests/lib/rules/no-undef-properties.js index 8b8ebbb1d..9a97fe1a9 100644 --- a/tests/lib/rules/no-undef-properties.js +++ b/tests/lib/rules/no-undef-properties.js @@ -6,6 +6,9 @@ const RuleTester = require('eslint').RuleTester const rule = require('../../../lib/rules/no-undef-properties') +const { + getTypeScriptFixtureTestOptions +} = require('../../test-utils/typescript') const tester = new RuleTester({ parser: require.resolve('vue-eslint-parser'), @@ -535,6 +538,26 @@ tester.run('no-undef-properties', rule, { }, }; ` + }, + + { + // unknown type + filename: 'test.vue', + code: ` + + + `, + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } ], @@ -1129,6 +1152,30 @@ tester.run('no-undef-properties', rule, { column: 46 } ] + }, + + { + // known type + filename: 'test.vue', + code: ` + + + `, + ...getTypeScriptFixtureTestOptions(), + errors: [ + { + message: "'unknown' is not defined.", + line: 11 + } + ] } ] })