vuejs/eslint-plugin-vue

`"vue/define-props-destructuring": "error",` allowes usage of non destructured prop

Opened this issue · 0 comments

Checklist

  • I have tried restarting my IDE and the issue persists.
  • I have read the FAQ and my problem is not listed.

Tell us about your environment

  • ESLint version: 9.27.0
  • eslint-plugin-vue version: 10.1.0
  • Vue version: 3.5.15
  • Node version: 24.1
  • Operating System: Windows 11

Please show your full configuration:

import antfu from "@antfu/eslint-config";

export default antfu({
  stylistic: {
    quotes: "double",
    semi: true
  },
  typescript: {
    overridesTypeAware: {
      "ts/consistent-type-imports": "error",
      "ts/consistent-type-exports": "error",
      "ts/require-await": "error",
      "ts/return-await": "error",
      "ts/prefer-optional-chain": "error",
      "ts/prefer-nullish-coalescing": "error",
      "ts/no-redundant-type-constituents": "error",
      "ts/no-unnecessary-boolean-literal-compare": "error",
      "ts/no-unnecessary-condition": "error",
      "ts/no-unnecessary-type-arguments": "error",
      "ts/no-unnecessary-template-expression": "error",
      "ts/no-unnecessary-type-parameters": "error",
      "ts/non-nullable-type-assertion-style": "error"
    },
    overrides: {
      "ts/consistent-type-definitions": "off",
      "ts/no-unused-vars": [
        "error",
        {
          args: "all",
          argsIgnorePattern: "^_",
          caughtErrors: "all",
          caughtErrorsIgnorePattern: "^_",
          destructuredArrayIgnorePattern: "^_",
          varsIgnorePattern: "^_",
          ignoreRestSiblings: true
        }
      ],
      "ts/no-explicit-any": "warn",
      "ts/array-type": "error",
      "ts/consistent-indexed-object-style": "error",
      "ts/consistent-type-assertions": "error",
      "ts/no-unnecessary-parameter-property-assignment": "error"
    }
  },
  vue: {
    a11y: true,
    overrides: {
      "vue/define-props-destructuring": "error",
      "vue/define-props-declaration": "error",
      "vue/define-emits-declaration": ["error", "type-literal"],
      "vue/no-unused-emit-declarations": "error",
      "vue/html-button-has-type": "error",
      "vue/prefer-use-template-ref": "error",
      "vue/require-explicit-slots": "error",
      "vue/multi-word-component-names": "warn",
      "vue/component-api-style": ["error", ["script-setup"]],
      "vue/html-self-closing": ["error", { html: { void: "never", normal: "never", component: "always" } }],
      "vue/custom-event-name-casing": ["error", "camelCase", {
        ignores: ["/^[a-z][a-zA-Z]*(?:-[a-z][a-zA-Z]*)*:[a-z][a-zA-Z]*(?:-[a-z][a-zA-Z]*)*$/u"]
      }]
    }
  }
}, {
  rules: {
    "style/linebreak-style": ["error", "windows"],
    "style/comma-dangle": ["error", "never"],
    "style/brace-style": ["error", "1tbs", { allowSingleLine: false }],
    "style/member-delimiter-style": ["error", { multiline: { delimiter: "semi" } }]
  }
});

What did you do?

const { foo } = defineProps<{
  foo: string;
  bar: string;
}>();
<p v-if="bar === 'test'">
...
</p>

What did you expect to happen?
I expect to get an error because I use a prop that is not being destructured.

What actually happened?
No error

Repository to reproduce this issue
See HelloWorld.Vue:
https://github.com/blouflashdb/vue-project