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
+ }
+ ]
}
]
})