diff --git a/lib/rules/no-deprecated-props-default-this.js b/lib/rules/no-deprecated-props-default-this.js
index 5a89da941..7f9b51a1a 100644
--- a/lib/rules/no-deprecated-props-default-this.js
+++ b/lib/rules/no-deprecated-props-default-this.js
@@ -73,6 +73,27 @@ module.exports = {
scopeStack = scopeStack.upper
}
}
+
+ /**
+ * @param {Expression|SpreadElement|null} node
+ */
+ function isFunctionIdentifier(node) {
+ return node && node.type === 'Identifier' && node.name === 'Function'
+ }
+
+ /**
+ * @param {Expression} node
+ * @returns {boolean}
+ */
+ function hasFunctionType(node) {
+ if (isFunctionIdentifier(node)) {
+ return true
+ }
+ if (node.type === 'ArrayExpression') {
+ return node.elements.some(isFunctionIdentifier)
+ }
+ return false
+ }
return utils.defineVueVisitor(context, {
onVueObjectEnter(node) {
for (const prop of utils.getComponentProps(node)) {
@@ -86,6 +107,11 @@ module.exports = {
if (!def) {
continue
}
+ const type = utils.findProperty(prop.value, 'type')
+ if (type && hasFunctionType(type.value)) {
+ // ignore function type
+ continue
+ }
if (def.value.type !== 'FunctionExpression') {
continue
}
diff --git a/tests/lib/rules/no-deprecated-props-default-this.js b/tests/lib/rules/no-deprecated-props-default-this.js
index 0993e817a..0d5f8ff24 100644
--- a/tests/lib/rules/no-deprecated-props-default-this.js
+++ b/tests/lib/rules/no-deprecated-props-default-this.js
@@ -96,6 +96,31 @@ ruleTester.run('no-deprecated-props-default-this', rule, {
}
`
+ },
+ {
+ // https://github.com/vuejs/eslint-plugin-vue/issues/1464
+ filename: 'test.vue',
+ code: `
+
+
+
+
+
+ `
}
],