diff --git a/lib/rules/require-default-prop.js b/lib/rules/require-default-prop.js index b5d2564e8..acceacf08 100644 --- a/lib/rules/require-default-prop.js +++ b/lib/rules/require-default-prop.js @@ -200,8 +200,8 @@ module.exports = { processProps(props, (prop) => { if (prop.type === 'type') { - if (!hasWithDefaults) { - // If don't use withDefaults(), exclude it from the report. + if (!hasWithDefaults && !isUsingPropsDestructure) { + // If don't use withDefaults() and props destructure, exclude it from the report. return true } if (defaultsByWithDefaults[prop.propName]) { diff --git a/tests/lib/rules/require-default-prop.js b/tests/lib/rules/require-default-prop.js index e352eddf3..43160dfda 100644 --- a/tests/lib/rules/require-default-prop.js +++ b/tests/lib/rules/require-default-prop.js @@ -388,6 +388,31 @@ ruleTester.run('require-default-prop', rule, { parser: require('vue-eslint-parser'), ...languageOptions } + }, + { + filename: 'test.vue', + code: ` + + `, + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions + } + }, + { + filename: 'test.vue', + code: ` + + `, + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions, + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + } } ], @@ -700,6 +725,26 @@ ruleTester.run('require-default-prop', rule, { line: 3 } ] + }, + { + // https://github.com/vuejs/eslint-plugin-vue/issues/2725 + filename: 'type-with-props-destructure.vue', + code: ` + + `, + languageOptions: { + parser: require('vue-eslint-parser'), + ...languageOptions, + parserOptions: { parser: require.resolve('@typescript-eslint/parser') } + }, + errors: [ + { + message: "Prop 'foo' requires default value to be set.", + line: 3 + } + ] } ] })