diff --git a/lib/rules/require-prop-types.js b/lib/rules/require-prop-types.js
index 17037853f..3978db3f0 100644
--- a/lib/rules/require-prop-types.js
+++ b/lib/rules/require-prop-types.js
@@ -92,12 +92,24 @@ module.exports = {
// Public
// ----------------------------------------------------------------------
- return utils.executeOnVue(context, (obj) => {
- const props = utils.getComponentProps(obj)
+ return utils.compositingVisitors(
+ utils.defineScriptSetupVisitor(context, {
+ onDefinePropsEnter(_node, props) {
+ for (const prop of props) {
+ if (prop.type === 'type') {
+ continue
+ }
+ checkProperty(prop)
+ }
+ }
+ }),
+ utils.executeOnVue(context, (obj) => {
+ const props = utils.getComponentProps(obj)
- for (const prop of props) {
- checkProperty(prop)
- }
- })
+ for (const prop of props) {
+ checkProperty(prop)
+ }
+ })
+ )
}
}
diff --git a/tests/lib/rules/require-prop-types.js b/tests/lib/rules/require-prop-types.js
index 4d7d153b3..990126536 100644
--- a/tests/lib/rules/require-prop-types.js
+++ b/tests/lib/rules/require-prop-types.js
@@ -158,6 +158,32 @@ ruleTester.run('require-prop-types', rule, {
`,
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
parser: require.resolve('@typescript-eslint/parser')
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `,
+ parserOptions: { ecmaVersion: 6, sourceType: 'module' },
+ parser: require.resolve('vue-eslint-parser')
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `,
+ parserOptions: {
+ ecmaVersion: 6,
+ sourceType: 'module',
+ parser: require.resolve('@typescript-eslint/parser')
+ },
+ parser: require.resolve('vue-eslint-parser')
}
],
@@ -305,6 +331,40 @@ ruleTester.run('require-prop-types', rule, {
line: 4
}
]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `,
+ parserOptions: { ecmaVersion: 6, sourceType: 'module' },
+ parser: require.resolve('vue-eslint-parser'),
+ errors: [
+ {
+ message: 'Prop "foo" should define at least its type.',
+ line: 4
+ }
+ ]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+
+ `,
+ parserOptions: { ecmaVersion: 6, sourceType: 'module' },
+ parser: require.resolve('vue-eslint-parser'),
+ errors: [
+ {
+ message: 'Prop "foo" should define at least its type.',
+ line: 3
+ }
+ ]
}
]
})